相关疑难解决方法(0)

使用fetchedResultController删除表视图中的行

在swype删除期间(此方法的大多数importatnt行):

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
 if (editingStyle == UITableViewCellEditingStyleDelete)
  {
    Table *deleteRow = [self.fetchedResultsController objectAtIndexPath:indexPath];
    [self.managedObjectContext deleteObject:deleteRow];
    [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
  }   
}
Run Code Online (Sandbox Code Playgroud)

删除行时出现此错误:

由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'无效更新:第2节中的行数无效.更新
后的现有部分中包含的行数(1)必须等于该行中包含的行数在更新(1)之前的部分,加上或减去从该部分插入或删除的行数(0插入,1删除)和加或减移入或移出该部分的行数(0移入,0移动)出)."

如果我评论最后一行代码([tableView deleteRowsAtIndexPaths:...])一切正常(但我必须刷新视图才能看到该行被删除).

怎么做得好......?

编辑:考虑@Kyr Dunenkoff回应我添加:

- (void)controller:(NSFetchedResultsController*)controller didChangeObject:(id)anObject atIndexPath:(NSIndexPath*)indexPath forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath*)newIndexPath
{
    UITableView *tableV = [self tableView];
    switch(type) {
        case NSFetchedResultsChangeDelete:
            [tableV deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
            break;
    }
}

- (void)controllerDidChangeContent:(NSFetchedResultsController*)controller
{
    [[self tableView] endUpdates];
}

- (void)controllerWillChangeContent:(NSFetchedResultsController*)controller
{
    [[self tableView] beginUpdates];
}
Run Code Online (Sandbox Code Playgroud)

但是这并没有改变崩溃和错误.它只是导致添加新行不再起作用.

objective-c tableview nsfetchedresultscontroller ios

12
推荐指数
2
解决办法
1万
查看次数