如何使用 Swift 访问 tabBarController 中的 ObjectAtIndex?

Posted

技术标签:

【中文标题】如何使用 Swift 访问 tabBarController 中的 ObjectAtIndex?【英文标题】:How to access ObjectAtIndex in tabBarController with Swift? 【发布时间】:2014-08-19 20:54:59 【问题描述】:

我以前在obj-c中说

[self.tabBarController.viewControllers objectAtIndex:1];

但现在很快就没有 ObjectAtIndex 了

self.tabBarController.viewControllers.ObjectAtIndex

更新

好的,我要让它变得简单,让我们考虑一下我有 tabBarController 它包含 2 个对象 [第一视图控制器,第二视图控制器] 我正在尝试在对象之间进行委托 这是设置委托的代码

var Svc:SecondViewController = self.tabBarController.viewControllers[1] as SecondViewController!
Svc.delegate = self

当我运行时,我得到了这个错误 0x1064de80d: movq %r14, %rax 并且没有控制台错误出现

【问题讨论】:

【参考方案1】:

你的代码没问题:

var svc:SecondViewController = self.tabBarController.viewControllers[1] as SecondViewController!
svc.delegate = self

...但是您可以省略末尾的 ! 标记和 :SecondViewController 类型定义,因为它可以通过强制转换推断出来:

var svc = self.tabBarController.viewControllers[1] as SecondViewController

出现问题是因为您尝试投射到错误的类。 尝试在[1]处打印调试对象类的日志名称;在你的演员表之前添加这个来检查类名:

let vcTypeName = NSStringFromClass(self.tabBarController.viewControllers[1].classForCoder)
println("\(vcTypeName)")

更新:

正如我们在 cmets 中发现的,您应该将收到的视图控制器转换为 UINavigationController

var nc = self.tabBarController.viewControllers[1] as UINavigationController

稍后您可以检查nc.viewControllers 属性并查看其topViewController 是否为SecondViewController

if nc.topViewController is SecondViewController 
    var svc = nc.topViewController as SecondViewController
    // your code goes here

【讨论】:

控制台打印 UINavigationController 现在我应该先通过 UINavigationController 吧? 这意味着在你的viewControllers 数组的第一个位置你有UINavigationController 这显然不是你用于演员表的SecondViewController 类。这就是你得到错误的原因。您是否将 SecondViewController 类实例包装在导航视图控制器中? 是的,我在第一个和第二个 viewController 之前都有一个 UINavigationController 谢谢。保存我的一天 +1。【参考方案2】:

你不需要objectAtIndex swift,只需使用subscript 运算符:

self.tabBarController.viewControllers[1]

【讨论】:

我在使用 [1] 0x1064de80d: movq %r14, %rax时遇到了这个菜鸟错误 你确定viewControllers数组中有对象吗? 是的,我有 4 个对象 你能用更多的上下文更新你的问题吗?听起来您现在遇到了一个单独的错误,但仅用一行代码很难判断。此外,当它崩溃时,您是否在调试控制台中收到任何错误? 您还有什么建议吗?

以上是关于如何使用 Swift 访问 tabBarController 中的 ObjectAtIndex?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Swift 反应原生自定义 UI 组件:如何在事件中访问 reactTag

如何使用 Alamofire (Swift 2.2) 获取 Twitter 访问令牌

iOS + Swift,如何访问所有音乐文件 [关闭]

如何使用 Swift 动态访问数组中的项目

如何使用 Swift 在 healthkit 中访问锻炼的元数据

如何在 xctest 中使用 swift 点击地图注释时访问标注视图