【问题标题】:How to access ObjectAtIndex in tabBarController with Swift?如何使用 Swift 访问 tabBarController 中的 ObjectAtIndex?
【发布时间】: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 并且没有控制台错误出现

【问题讨论】:

    标签: ios swift uitabbarcontroller viewcontroller


    【解决方案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 个对象
    • 你能用更多的上下文更新你的问题吗?听起来您现在遇到了一个单独的错误,但仅用一行代码很难判断。此外,当它崩溃时,您是否在调试控制台中收到任何错误?
    • 您还有什么建议吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多