NSFetchedResultsController 在 -controllerDidChangeContent: 插入新记录并保存到 persistentStore 时崩溃。
法典:
- (void)controller:(NSFetchedResultsController *)controller
didChangeObject:(id)anObject
atIndexPath:(NSIndexPath *)indexPath
forChangeType:(NSFetchedResultsChangeType)type
newIndexPath:(NSIndexPath *)newIndexPath {
NSLog(@"== UPDATING indexPath (%@) newIndexPath (%@) type %i", indexPath, newIndexPath, (int)type);
switch (type) {
case NSFetchedResultsChangeDelete: {
[self.tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationTop];
break;
}
case NSFetchedResultsChangeInsert: {
[self.tableView insertRowsAtIndexPaths:@[newIndexPath] withRowAnimation:UITableViewRowAnimationBottom];
break;
}
case NSFetchedResultsChangeMove: {
[self.tableView moveRowAtIndexPath:indexPath toIndexPath:newIndexPath];
break;
}
case NSFetchedResultsChangeUpdate: {
[self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationTop];
break;
}
default:
break;
}
}
- (void)controllerWillChangeContent:(NSFetchedResultsController *)controller {
NSLog(@"== BEGIN UPDATING");
[self.tableView beginUpdates];
}
- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller {
NSLog(@"== END UPDATING");
[self.tableView endUpdates];
}
注意:- 在目标应用程序中,FetchedResults 委托是在 UITableViewController 子类中实现的。FetchedResultsController 正在使用子托管对象上下文。
可能的错误来源(请提供错误消息):
- 向财务汇报局提供数据的MOC不具有
NSMainQueueConcurrencyType
。 -
-controller:didChangeSection:atIndex:forChangeType:
未实现。