deleteRowsAtIndexPaths

deleteRowsAtIndexPaths

我正在使用Matt Gallagher的GenericTableViewController想法控制我的UITableViews。我的数据源是NSFetchedResultsController

http://cocoawithlove.com/2008/12/heterogeneous-cells-in.html

一切正常,直到我尝试删除单元格。

我的View Controller中有以下代码:

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {

  if (editingStyle == UITableViewCellEditingStyleDelete) {

        // Delete the managed object.
        NSManagedObjectContext *context = [wineryController managedObjectContext];
        [context deleteObject:[wineryController objectAtIndexPath:indexPath]];

        NSError *error;
        if (![context save:&error]) {
            // Handle the error.
        }
        [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
  }
}

最后一行崩溃,控制台中的解释很冗长:

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

好的,我知道这是在说什么……行不会被删除(我会假设),因为我没有将某些消息转发到正确的位置(因为我已经从“正常”位置移走了一些代码)。有谁知道哪个?我对此完全感到困惑。

最佳答案

好吧,ba我只是找到this答案,这是不一样的,但是却使我朝着正确的方向前进。我将在这里留给以后遇到类似麻烦的任何人。

关键是用begin和end标签包装deleteRowsAtIndexPaths,并强制模型在同一块内更新,结果是:

[tableView beginUpdates];
[self constructTableGroups];
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
        withRowAnimation:UITableViewRowAnimationFade];
[tableView endUpdates];

这使问题消失了,动画效果也很好。

关于iphone - 如何使deleteRowsAtIndexPaths:与通用TableViewController一起使用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1016200/

10-11 04:27