我有一个UITableViewController,它实现了NSFetchedResultsControllerDelegate。在
- (NSFetchedResultsController *)fetchedResultsController
我正在从实体加载记录。现在当我更新该实体中的记录时,NSFetchedResultsChangeType总是NSFetchedResultsChangeDelete并删除我的对象。我认为它应该更新,因为我正在更新记录而不是删除它。
- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath *)newIndexPath {
UITableView *tableView = self.tableView;
switch(type) {
case NSFetchedResultsChangeInsert:
[tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexPath] withRowAnimation:UITableViewRowAnimationFade];
break;
case NSFetchedResultsChangeDelete:
NSLog(@"object deleted %d",
indexPath.row);
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
break;
case NSFetchedResultsChangeUpdate:
[self configureCell:[tableView cellForRowAtIndexPath:indexPath] atIndexPath:indexPath];
break;
case NSFetchedResultsChangeMove:
NSLog(@"object moved %d",
indexPath.row);
[tableView deleteRowsAtIndexPaths:[NSArray
arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
[tableView insertRowsAtIndexPaths:[NSArray
arrayWithObject:newIndexPath] withRowAnimation:UITableViewRowAnimationFade];
break;
}}
编辑1:
在我第一次保存对象时,它似乎也没有插入。事实上,在那一点上,didChangeObject甚至没有被解雇。
编辑2
更多信息: 我对不同的谓词使用相同的表。我有一个拆分视图,左右视图都是表视图。在左侧,我显示了一些类别,并根据左侧的选择我在右边配置视图。配置首先删除缓存,然后更改NSFetchedResultsController的谓词,然后对其执行performFetch。在后台,我找到所选类别的更新对象,并插入新对象或更新现有对象。现在添加新对象不会在表视图中自动显示,更新对象会导致删除。我从另一个NSFetchedResultsController更新左表视图中的类别,并且工作正常。 NSFetchedResultsController都使用不同的缓存文件。如果我不改变谓词那么一切都适用于所有类别的对象。谓词是从所选类别中获取记录。
答案 0 :(得分:0)
我遇到了同样的问题。这就是我修复的方法: