很长一段时间以来,我遇到了一个奇怪的错误,我的大部分表格视图都变黑了(只有几个单元格保持http://cl.ly/LFlS),而在其他视图中(连接到同一个 MOC)还有一些其他的视觉出现故障:http ://cl.ly/LH3c (注意重复的部分标题)。我一直认为这是 CoreData 的一个错误,但直到今天它被连接到调试器时我才得以重现它。这是我在它发生之前得到的例外:
CoreData:错误:严重的应用程序错误。在调用 -controllerDidChangeContent: 期间,从 NSFetchedResultsController 的委托中捕获了一个异常。 * -[__NSArrayM insertObject:atIndex:]: 对象不能为 nil 和 userInfo (null)
[tableView endUpdates]
它在我的controllerDidChangeContent:
方法中停止了。然后,如果我单击继续,应用程序不会崩溃,但用户交互会变得非常缓慢。我四处寻找可能是导致该异常的原因,但找不到任何东西。有什么线索吗?
我的 NSFetchedResultsController 更改处理看起来很像 Apple 的样板文件。我的 NSFRC 的 init 如下所示:
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Artist" inManagedObjectContext:[SWDataManager sharedManager].mainObjectContext];
[request setEntity:entity];
[request setFetchBatchSize:100];
NSSortDescriptor *sortByName = [[NSSortDescriptor alloc] initWithKey:@"sortName" ascending:YES selector:@selector(localizedCaseInsensitiveCompare:)];
[request setSortDescriptors:@[sortByName]];
fetchedResultsController = [[NSFetchedResultsController alloc]
initWithFetchRequest:request
managedObjectContext:mainObjectContext
sectionNameKeyPath:@"firstLetter"
cacheName:nil];
fetchedResultsController.delegate = self;
[self refreshDataSource]; // set fetch request predicate and call performFetch on NSFRC
return fetchedResultsController;
编辑:我可以补充一点,这肯定发生在一堆对象从我的 MOC 中删除之后,因此从表视图中删除。
根据要求,我的controllerDidChangeContent:
代码:
- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller {
[self.tableView endUpdates];
// this updates the section index and footer cell and other kind of stuff
[self performSelector:@selector(layoutSpecialCells) withObject:nil afterDelay:0.3];
}