【问题标题】:"Unrecognized selector sent to instance" error“无法识别的选择器发送到实例”错误
【发布时间】:2012-04-04 19:34:06
【问题描述】:

我的 AppDelegate 代码的一部分是:

UITabBarController *tabBarController 
    = (UITabBarController *)self.window.rootViewController;

UINavigationController *navigationController 
    = [[tabBarController viewControllers] objectAtIndex:0];

PilotosViewController *playersViewController 
    = [[navigationController viewControllers] objectAtIndex:0];

playersViewController.drivers = players;

但我得到了这个例外:

-[UIViewController viewControllers]:无法识别的选择器发送到实例 0x6a75770
*** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:'-[UIViewController viewControllers]:无法识别的选择器发送到实例 0x6a75770'

错在哪里?

【问题讨论】:

  • 你怎么知道这是导致问题的代码部分?您是否设置了断点并使用调试器跟踪代码执行?该错误表明您将 viewControllers 发送到 UIViewController 实例,但您的代码 sn-p 仅显示接收该消息的 UITabBarController 和 UINavigationController 实例。

标签: objective-c ios uiviewcontroller


【解决方案1】:

我遇到了同样的问题,因为我按照作者的步骤,但是

UINavigationController *navigationController 
    = [[tabBarController viewControllers] objectAtIndex:0];

这是导致崩溃的原因,因为navigationController 不在index=0, 我确实交换了两个标签栏项目的位置,然后就可以了。

【讨论】:

  • 非常感谢。你拯救了我的一天。
  • 谢谢.. 我刚卡了半个小时。自己搜索找不到答案..在STO阅读您的答案,解决了我的问题。 :) 我投票给你的答案。
【解决方案2】:

您显然在 index = 0 上接收到不同类型的对象。

如果您使用情节提要,请转到那里并打开导航器 > 查找特定控制器 > 查看关系。引用其 viewControllers 集合时可以使用此顺序。

【讨论】:

    【解决方案3】:

    您需要确保在您的 XIB 或情节提要中正确连接事物。例外是当您发送[tabBarController viewControllers] 并且您期待UITabBarController 时,该对象的类型为ViewController。这就是您收到'-[ViewController viewControllers]: 的原因。确保你的根视图控制器确实是一个标签视图控制器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-24
      相关资源
      最近更新 更多