如何使用 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 访问令牌