2

我有一个实现 NSFetchedResultsControllerDelegate 的 UITableViewController。在

- (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 都使用不同的缓存文件。如果我不更改谓词,那么所有类别的对象都可以正常工作。

4

1 回答 1

0

我遇到了同样的问题。这就是我修复的方式:

  1. 我的谓词使用 ("index == %@")
  2. 我正在过滤一个整数值,但我传递了@“1”。
  3. 将其更改为 %i 并传递整数,有效。
于 2015-02-12T18:02:13.450 回答