performSelector抛出UIViewControllerHierarchyInconsistency异常

时间:2011-10-13 09:36:41

标签: iphone objective-c ios xcode ios5

我正在为iO 4.3开发我的XCode 4.1应用程序,但昨天我用iOs 5.0 SDK将它更新为XCode 4.2。

当我在iphone 4.3模拟器中运行我的应用程序时,它运行良好。 我决定在iphone 5.0模拟器上测试它,并出现以下问题:

  • 我有一个视图控制器f.e“MyViewController”,以及一个自定义类,它实现了一些自定义组件“MyCustomComponent”,它被添加到“MyViewController”中。 MyCustomComponent中有一个按钮,当它触摸它来自MyViewController的peformSelector时,它会导致EXC_BAD崩溃。相同的代码完全适用于iPhone 4.3模拟器。有任何想法吗?
  • 自定义导航栏 - 根本不起作用。我正在尝试设置实现UINavigationBar的自定义后台,并覆盖drawRect,但它没有在ios 5中显示。

3 个答案:

答案 0 :(得分:6)

好的,所以我猜我想出来了。我的控制台关闭,当我重新安装xcode时,所以没有看到任何错误消息。现在打开它,并收到错误

  

由于未捕获的异常而终止应用   'UIViewControllerHierarchyInconsistency'

问题是我使用

将MyCustomComponent添加到MyViewController
self.view=myCustomComponent.view

我应该做什么

[self.view addSubview:myCustomCoponent.view]

这不是ios 4.3中的一个问题,但在ios 5中似乎是一个大问题。

答案 1 :(得分:0)

我在同样的问题上挣扎。

当您创建新的Master-Detail应用程序(没有故事板)时,您可以从AppDelegate.m中看到以下代码。

 MasterViewController *masterViewController = [[MasterViewController alloc] initWithNibName:@"MasterViewController" bundle:nil];
self.navigationController = [[UINavigationController alloc] initWithRootViewController:masterViewController];
self.window.rootViewController = self.navigationController;
[self.window makeKeyAndVisible];

“不要依赖MainWindow” 从您自己的ViewController开始,并将其设置为委托。 并且不要忘记从MainWindow.xib取消链接视图,否则视图将被调用2次。

答案 2 :(得分:-1)

EXC_BAD_ACCESS表示该对象不存在。尝试NSLog-ging正在执行performSelector方法的对象。

编辑:如果在尝试登录时崩溃,它已被解除分配。检查是否正确保留了对象!

如果是有效对象,请尝试:

if(![obj respondsToSelector:@selector(mySelector:)]){NSLog(@"no such method!");}