【问题标题】:iOS - Terminating app due to uncaught exception 'NSInternalInconsistencyException'iOS - 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序
【发布时间】:2015-12-19 01:21:46
【问题描述】:

安装了 Xcode 7.1 Beta 并在 iOS 9.0 上测试了我的应用,但出现以下错误。我在这里彻底解决了不同的问题。

我将 IIViewDeckController 用于左侧菜单和 PullRefreshTableViewController。在应用程序委托中,我注册到不同的通知并进行 Web 服务调用以获取 VC1(Menu1) 和 VC2(Menu2) 的视图控制器的数据,它们都继承了 PullRefreshTableViewController。首先显示VC1。当用户导航到 VC2 时,视图会加载拉取的数据,但会因以下异常而崩溃。

*** 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“UIView 类的实例 0x7fa8c541eaf0 已被释放,而键值观察者仍向其注册。当前观察信息:( 上下文:0x0,属性:0x7fa8c1d1b470> )'

*** 首先抛出调用堆栈: (

0   CoreFoundation                      0x0000000110d7df65 __exceptionPreprocess + 165
1   libobjc.A.dylib                     0x00000001107f5deb objc_exception_throw + 48
2   CoreFoundation                      0x0000000110d7de9d +[NSException raise:format:] + 205
3   Foundation                          0x000000010f6528c1 NSKVODeallocate + 294
4   libobjc.A.dylib                     0x000000011080a0b8 _ZN12_GLOBAL__N_119AutoreleasePoolPage3popEPv + 488
5   CoreFoundation                      0x0000000110c6b956 _CFAutoreleasePoolPop + 22
6   CoreFoundation                      0x0000000110c9f8d1 __CFRunLoopRun + 2081
7   CoreFoundation                      0x0000000110c9ee28 CFRunLoopRunSpecific + 488
8   GraphicsServices                    0x00000001134e4ad2 GSEventRunModal + 161
9   UIKit                               0x000000010e12eca1 UIApplicationMain + 171
10  SeeMyRadiology                      0x000000010d0d507e SeeMyRadiology + 16510
11  libdyld.dylib                       0x000000011126992d start + 1

)

libc++abi.dylib:以 NSException 类型的未捕获异常终止

**注意:**相同的代码可以在 iPad 上正常运行

【问题讨论】:

  • 您是否在该类中注册了任何 KVO,并且您是否在对象被释放之前删除了这些?
  • 不。我还没有注册任何 KVO。
  • iOS 9.1 相同的代码适用于 iPad,但不适用于 iPhone。

标签: ios objective-c uitableview


【解决方案1】:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

    UIStoryboard* mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle: nil];
    UIViewController* menuController = [mainStoryboard instantiateViewControllerWithIdentifier:@"LeftSideMenu"];

    UINavigationController* navigationController = (UINavigationController *) self.window.rootViewController;
    self.viewDeckController =  [[IIViewDeckController alloc] initWithCenterViewController:navigationController leftViewController:menuController rightViewController:nil];
    self.window.rootViewController = self.viewDeckController;
}

https://github.com/edgecase/ECSlidingViewController

以防万一无法解决问题。

【讨论】:

  • 我没有使用 StoryBoard :( 。但根控制器的设置类似。
【解决方案2】:

如果您的表被重新加载,您的视图可能会丢失,我的意思是,它们已被释放。如果在某处释放视图和值之间存在一些连接,则会导致崩溃。您需要在解除分配之前停止观察值以避免崩溃。检查这个场景。

【讨论】:

    【解决方案3】:

    这对我有用。 问题是在将视图推送到 IIViewDeckController 时。

    AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
    
    UINavigationController *centerController = [[UINavigationController alloc] initWithRootViewController:appDelegate.viewController];
    [appDelegate.viewDeckController closeLeftViewBouncing:^(IIViewDeckController *controller)
     {
         appDelegate.viewDeckController.centerController = centerController;
     }];
    

    谢谢你们的意见。 :)

    【讨论】:

      猜你喜欢
      • 2017-01-08
      • 2014-01-05
      • 2012-08-24
      • 1970-01-01
      • 2012-07-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多