【发布时间】:2012-11-29 09:17:50
【问题描述】:
很长一段时间以来,我都遇到了一个奇怪的错误,我的大部分表格视图都变黑了(只有少数单元格保持http://cl.ly/LFlS),而在其他视图(连接到同一个 MOC)中,出现了一些其他视觉故障: http://cl.ly/LH3c(注意重复的部分标题)。我一直认为这是 CoreData 的一个错误,但直到今天它被连接到调试器时我才得以重现它。这是我在它发生之前得到的异常:
CoreData:错误:严重的应用程序错误。捕获到异常 在调用期间从 NSFetchedResultsController 的委托 -controllerDidChangeContent:。 * -[__NSArrayM insertObject:atIndex:]: object 不能为 nil with userInfo (null)
在我的controllerDidChangeContent: 方法中,它停在[tableView endUpdates] 行。然后,如果我单击继续,应用程序不会崩溃,但用户交互会变得非常缓慢。我四处寻找可能是导致该异常的原因,但找不到任何东西。有什么线索吗?
我的 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];
}
【问题讨论】:
-
您需要发布您的
-controllerDidChangeContent:。 -
@Mundi 添加。就像我说的,没什么特别的……
-
还添加了出现异常后我的表格视图的截图。
-
仅供参考,我遇到了同样的问题,this 回答解决了我的问题。就我而言,似乎在将更多单元格添加到表格视图时使用
NSFetchedResultsController和estimatedRowHeight会导致未捕获的异常,导致表格视图无响应、滞后且无法正确显示。