使用fetchedResultsContainer在核心数据中出现严重的应用程序错误

Chr*_*oph 18 iphone core-data nsfetchedresultscontroller

尝试添加记录时出现以下错误:

严重的应用错误.在Core Data更改处理期间捕获到异常.这通常是NSManagedObjectContextObjectsDidChangeNotification的观察者中的错误.userInfo(null)索引0无效

就是这样.我将断点放入我已实现的所有fetchedResultsContainer委托方法中,但没有任何中断.

我追查到:

  NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:@"titleFirstLetter" cacheName:@"Root"];
Run Code Online (Sandbox Code Playgroud)

"sectionNameKeyPath"是问题所在."titleFirstLetter"是一个瞬态属性,我在NSManagedObject子类中创建了一个getter.

这是吸气剂:

-(NSString *)titleFirstLetter
{
  [self willAccessValueForKey:@"titleFirstLetter"];
  NSString *aString = [[self valueForKey:@"title"] uppercaseString];

  NSString *stringToReturn = [aString substringWithRange:[aString rangeOfComposedCharacterSequenceAtIndex:0]];

  [self didAccessValueForKey:@"titleFirstLetter"];
  return stringToReturn;
}
Run Code Online (Sandbox Code Playgroud)

当我将sectionNameKeyPath更改为nil时,它可以工作,但显然不是我想要的.当我已经为我的模型填写了标题时它也有效,因此titleFirstLetter不会返回nil,尽管这似乎不是问题.如果我将字符串设为任意内容,如果它为零,它仍然会崩溃.

知道这里有什么?

更新:如果我使用sectionNameKeyPath中的标题而不是transient属性,它不会崩溃,但显然会将每个项目放在自己的部分中.所以它与瞬态属性有某种关系......

UPDATE2:使用持久属性而不是瞬态的一些初步黑客,并没有其他更改,似乎工作得很好,所以这看起来是一个错误.我有一个错误报告打开:#8553064

更新3:好吧,抓一点.使用持久属性没有任何区别.我现在有点蠢蠢欲动.

谢谢!

Chr*_*oph 12

好吧,这可能是部分(或完全)用户错误.问题是,在我添加新项目的视图中,我已经放入[self.tableView reloadData]viewWillAppear方法.评论说没有更新表格单元格,但阻止了崩溃.

然后我继续前往reloadRowsAtIndexPaths:withRowAnimation:表视图,手动重新加载需要它的几个单元格.

我很高兴终于结束了!