当前位置:  开发笔记 > 前端 > 正文

如何使deleteRowsAtIndexPaths:使用GenericTableViewController?

如何解决《如何使deleteRowsAtIndexPaths:使用GenericTableViewController?》经验,为你挑选了1个好方法。

我正在使用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];
  }   
}

最后一行因控制台中相当冗长的解释而崩溃:

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException',  
reason: 'Invalid update: invalid number of rows in section 0.  The number of rows   
contained in an existing section after the update (5) must be equal to the number  
of rows contained in that section before the update (5), plus or minus the number  
of rows inserted or deleted from that section (0 inserted, 1 deleted).'

好的,我理解它是什么意思......一行没有被删除(我会假设),因为我没有将一些消息转发到正确的地方(因为我已经从其'普通'位置移动了一些代码).任何人都知道哪一个?我完全被这个困扰了.



1> mmc..:

好吧,呸.我刚刚找到了这个答案,这不一样,但让我朝着正确的方向前进.我会留在这里为将来遇到类似麻烦的人.

关键是用开始和结束标记包装deleteRowsAtIndexPaths,并强制模型在同一个块内更新,从而导致:

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

这导致问题消失,动画工作得非常完美.


您可以在动画块之前修改数据源.您看到的错误表明您在动画删除之前没有更改数据源.在动画删除这些行之前,请确保数据源处于最终状态(删除之后).
推荐阅读
mylvfamily
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有