在保存带有'NSInvalidArgumentException'的managedObjectContext时崩溃,但只是零星地

fra*_*ger 7 core-data nsmanagedobjectcontext

我一直在来自managedObjectContext上的save:命令崩溃.它甚至不满足NSLog语句,所以我没有看到未解决的错误语句,所以我无法弄清楚问题可能是什么.它不是每次都会发生,而只是偶尔发生.

这是代码(基本上想要增加一个计数器):

 if ([[managedObject valueForKey:@"canSee"]boolValue]){
    int read = [[managedObject valueForKey:@"timesRead"] intValue] +1;
    [managedObject setValue:[NSNumber numberWithInt:read] forKey:@"timesRead"]; 


    NSError *error;
    if (![resultsController.managedObjectContext save:&error]) {  //<-- crashes on this line!
        NSLog(@"Unresolved Core Data Save error %@, %@", error, [error userInfo]);
        exit(-1);
    }
Run Code Online (Sandbox Code Playgroud)

在控制台窗口中,我收到如下消息:

  2010-08-20 08:12:20.594 AppName[23501:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFSet controllerWillChangeContent:]: unrecognized selector sent to instance 0xe54f560'
Run Code Online (Sandbox Code Playgroud)

或这个:

  2010-08-20 08:12:20.594 AppName[23501:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFSet controllerWillChangeContent:]: unrecognized selector sent to instance 0xe54f560'
Run Code Online (Sandbox Code Playgroud)

甚至这个:

  2010-08-19 23:09:59.337 AppName[761:307] Serious application error.  Exception was caught during Core Data change processing.  This is usually a bug within an observer of NSManagedObjectContextObjectsDidChangeNotification.  -[UITableViewLabel controllerWillChangeContent:]: unrecognized selector sent to instance 0x7f0a860 with userInfo (null)
  2010-08-19 23:09:59.356 AppName[761:307] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UITableViewLabel controllerWillChangeContent:]: unrecognized selector sent to instance 0x7f0a860'
Run Code Online (Sandbox Code Playgroud)

然后它在第一次抛出时显示调用堆栈,然后是通知(在抛出'NSException'实例后调用终止,'[切换到进程23501]'和'程序接收信号:'SIGABRT".

我认为这个问题与CoreData有关,但我不确定.我已经清理了我的构建和目标,它似乎没有帮助.我试过锁定/解锁ManagedObjectContext但它没有帮助.

任何关于从何处开始寻找解决方案的想法都将不胜感激!

Mar*_*rra 16

看起来你正在发布一个UIViewController而不是发布它的关联NSFetchedResultsController.在NSFetchedResultsController试图通知其委托(最有可能的UIViewController)的保存退出.


Dis*_*Dev 5

要详细说明Marcus的回答,您需要确保在视图消失时为NSFetchedResultsController指定代理:

- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];

    self.fetchedResultsController.delegate = nil;
}
Run Code Online (Sandbox Code Playgroud)