NSFetchedResultsController crash on -controllerDidChangeCont



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 正在使用子托管对象上下文。

可能的错误来源(请提供错误消息):

  1. 向财务汇报局提供数据的MOC不具有NSMainQueueConcurrencyType
  2. -controller:didChangeSection:atIndex:forChangeType:未实现。

相关内容

  • 没有找到相关文章

最新更新