inv*_*ent 2 core-data uitableview nsfetchedresultscontroller ios
从NSFetchedResultsController提供的UITableView中删除行会导致我的应用程序崩溃.
错误是:
*断言失败 - [UITableView _endCellAnimationsWithContext:],/ SourceCache/UIKit/UIKit-2903.23/UITableView.m:1330
*由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'无效更新:第0部分中的行数无效.更新(1)后现有部分中包含的行数必须等于更新(1)之前该部分中包含的行数,加上或减去从该部分插入或删除的行数(插入0) ,1删除)并加上或减去移入或移出该部分的行数(0移入,0移出).
我只想滑动删除.我的删除代码如下:
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
[self.tableView beginUpdates];
SequenceData *sd = [self.fetchedResultsController objectAtIndexPath:indexPath];
[self.managedObjectContext deleteObject:sd];
[self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
withRowAnimation:UITableViewRowAnimationFade];
[self.tableView endUpdates];
}
Run Code Online (Sandbox Code Playgroud)
我的NSFetchedResultsController的设置就像Ray Wanderlich的教程(http://www.raywenderlich.com/999/core-data-tutorial-for-ios-how-to-use-nsfetchedresultscontroller)
行数由以下因素确定:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
id sectionObjects = [[self.fetchedResultsController sections] objectAtIndex:section];
NSInteger nbObjects = [sectionObjects numberOfObjects];
return nbObjects;
}
Run Code Online (Sandbox Code Playgroud)
看起来fetch没有更新(行数不变).我是否需要取自己(这不是由fetch控制器处理)?
显然我在这里缺少一些基本的东西.不要犹豫,建议基本答案.
我首先用控制器实现了这个:didChangeObject:...方法.错误是一样的,但有些细节不同.
编辑 我相信我的问题已修复.这两个答案(来自CX和Martin)帮助我找到了答案.马丁得到了答案,因为解释有助于我更好地理解......
Mar*_*n R 12
不要打电话
[self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
Run Code Online (Sandbox Code Playgroud)
如果您使用获取的结果控制器.仅删除对象
[self.managedObjectContext deleteObject:sd];
Run Code Online (Sandbox Code Playgroud)
然后自动调用获取的结果控制器委托方法 didChangeObject:
,并调用deleteRowsAtIndexPaths:
.
因此,在您的情况下,该行被删除了两次,这导致了异常.
请注意,您不需要beginUpdates
/ endUpdates
here.
归档时间: |
|
查看次数: |
4086 次 |
最近记录: |