【问题标题】:performSelector throws UIViewControllerHierarchyInconsistency exceptionperformSelector 抛出 UIViewControllerHierarchyInconsistency 异常
【发布时间】:2011-10-13 09:36:40
【问题描述】:

我在 XCode 4.1 上为 iOs 4.3 开发我的应用程序,但昨天我使用 iOs 5.0 SDK 将其更新到 XCode 4.2。

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

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

【问题讨论】:

  • 修复了导航栏weston-fl.com/blog/?p=3024
  • 好的,所以我想我想通了。当我重新安装 xcode 时,我的控制台关闭了,所以没有看到任何错误消息。现在打开它,并收到错误“由于未捕获的异常'UIViewControllerHierarchyInconsistency'而终止应用程序”。问题是我使用self.view = myCustomComponent.view将MyCustomComponent添加到MyViewController,当我应该做[self.view addSubview:myCustomCoponent.view]时,这在ios 4.3中不是问题,但似乎很重要在 iOS 5 中。

标签: iphone objective-c ios xcode ios5


【解决方案1】:

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

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

问题是我正在使用将 MyCustomComponent 添加到 MyViewController

self.view=myCustomComponent.view

我应该什么时候做

[self.view addSubview:myCustomCoponent.view]

这在 ios 4.3 中不是问题,但在 ios 5 中似乎很重要。

【讨论】:

    【解决方案2】:

    我也遇到过同样的问题。

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

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

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

    【讨论】:

      【解决方案3】:

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

      编辑:如果它在您尝试记录它时崩溃,它已被释放。检查您是否正确保留对象!

      如果是有效对象,试试:

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

      【讨论】:

      • nil 发送消息是Objective-C 中的无操作。
      • 对象有效,对象响应选择器,但我仍然在 pefrormSelector(((
      • 控制台有没有说什么?
      • 不,只是 SIGABRT,仅此而已。
      猜你喜欢
      • 2011-09-10
      • 1970-01-01
      • 2013-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-30
      • 1970-01-01
      • 2011-02-25
      相关资源
      最近更新 更多