【问题标题】:Objective-C: unrecognized selector sent to instance 0xba3e750Objective-C:无法识别的选择器发送到实例 0xba3e750
【发布时间】:2014-08-03 02:47:30
【问题描述】:

我已经编写了这段代码,当我运行程序时它抛出异常:无法识别的选择器发送到实例 0xba3e750

 storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
    navigationController = [storyboard instantiateViewControllerWithIdentifier:@"SecondViewID"];
    selected = navigationController.viewControllers[0];

当我将此行放在评论中时

//selected = navigationController.viewControllers[0];

这样,程序不会抛出异常。 这是一个例外

2014-06-12 20:59:44.749 传递图像 [2194:a0b] -[SecondViewController viewControllers]:无法识别的选择器发送到实例 0xba3e750 2014-06-12 20:59:44.753 传递图像 [2194:a0b] * 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[SecondViewController viewControllers]:无法识别的选择器发送到实例 0xba3e750” * 首先抛出调用栈: ( 0 CoreFoundation 0x017445e4 异常预处理 + 180 1 libobjc.A.dylib 0x014c78b6 objc_exception_throw + 44 2核心基础0x017e1903-[NSObject(NSObject)不识别选择器:]+275 3 核心基础 0x0173490b ___forwarding_ + 1019 4 核心基础 0x017344ee _CF_forwarding_prep_0 + 14 5 传递图像 0x000056a2 -[ViewController viewDidLoad] + 466 6 UIKit 0x00349318-[UIViewController loadViewIfRequired] + 696 7 UIKit 0x003495b4 -[UIViewController 视图] + 35 8 UIKit 0x002719fd-[UIWindow addRootViewControllerViewIfPossible] + 66 9 UIKit 0x00271d97 - [UIWindow _setHidden:强制:] + 312 10 UIKit 0x0027202d-[UIWindow _orderFrontWithoutMakingKey] + 49 11 UIKit 0x0027c89a -[UIWindow makeKeyAndVisible] + 65 12 UIKit 0x0022fcd0-[UIApplication_callInitializationDelegatesForURL:payload:suspended:] + 1851 13 UIKit 0x002343a8-[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] + 824 14 UIKit 0x0024887c-[UIApplication handleEvent:withNewEvent:] + 3447 15 UIKit 0x00248de9 -[UIApplication 发送事件:] + 85 16 UIKit 0x00236025 _UIApplicationHandleEvent + 736 17 图形服务 0x037932f6 _PurpleEventCallback + 776 18 图形服务 0x03792e01 PurpleEventCallback + 46 19 核心基础 0x016bfd65 CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION + 53 20 核心基础 0x016bfa9b __CFRunLoopDoSource1 + 523 21 核心基础 0x016ea77c __CFRunLoopRun + 2156 22 核心基础 0x016e9ac3 CFRunLoopRunSpecific + 467 23 核心基础 0x016e98db CFRunLoopRunInMode + 123 24 UIKit 0x00233add -[UIApplication_run] + 840 25 UIKit 0x00235d3b UIApplicationMain + 1225 26 传递图像 0x0000750d 主要 + 141 27 libdyld.dylib 0x01e78725 开始 + 0 28 ??? 0x00000001 0x0 + 1 ) libc++abi.dylib:以 NSException 类型的未捕获异常终止 (lldb)

【问题讨论】:

  • 能否请您从控制台添加整个错误消息。
  • 看来,您的 ViewController "SecondViewController" 不是 UINavigationController
  • 属性 UIStoryboard *storyboard;属性 UINavigationController *navigationController;属性 SecondViewController *selected;
  • @Caleb 抱歉,我的意思是 UINavigationController 当然。我的错。

标签: ios exception


【解决方案1】:

instantiateViewControllerWithIdentifier: 返回一个UIViewController,但你不应该将它存储在UINavigationController 中。当您尝试访问 UINavigationController 属性 (viewControllers) 时,它崩溃了,因为 UIViewController 没有名为 viewControllers 的属性。

尝试将 instantiateViewControllerWithIdentifier: 方法的返回值存储在 UIViewController 而不是 UINavigationController 中:

UIViewController * viewController = [storyboard instantiateViewControllerWithIdentifier:@"SecondViewID"];
selected = viewController.navigationController.viewControllers[0];

【讨论】:

  • +1 没有发生实际的演员阵容,但你是对的,OP 正在向不是导航控制器的视图控制器发送 UINavigationController 消息。
  • 无异常,但程序运行不正常。当我单击它时有一个按钮将转到一个新的视图控制器(已选择),但在该控制器中,屏幕顶部没有导航按钮。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-28
  • 2012-07-24
相关资源
最近更新 更多