【发布时间】:2011-05-02 17:08:43
【问题描述】:
我有一个 UITableView,它显示了与 CoreData 一起存储的对象列表。我可以使用以下代码删除对象:
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
if (editingStyle == UITableViewCellEditingStyleDelete) {
NSLog(@"Delete row");
[managedObjectContext deleteObject:[fetchedResultsController objectAtIndexPath:indexPath]];
// Save the context.
NSError *error;
if (![managedObjectContext save:&error]) {
/*do this gracefully one day */
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
[self refreshTables]; //where refreshTables just reloads the data the table is using and calls [self.tableView reloadData];
}
}
但它没有动画或美学。
当我尝试通过替换来制作动画时
[self refreshTables];
与
[self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
我收到以下错误:
-[UITableView _endCellAnimationsWithContext:] 中的断言失败,>/SourceCache/UIKit_Sim/UIKit-1261.5/UITableView.m:920 2010-10-30 16:46:35.717 MyApp[38226:207] * 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“无效更新:第 0 节中的行数无效。数量更新后现有节中包含的行数 (3) 必须等于更新前该节中包含的行数 (3),加上或减去从该节中插入或删除的行数(0 插入,1已删除)。'
我尝试在 commitEditingStyle 代码的多个位置使用 deleteRowsAtIndexPaths 代码,但没有成功(例如在从 mOC 中删除对象之前),但我似乎无法解决这个错误。
我知道 Apple 的 iPhoneCoreDataRecipes 示例通过为 FetchedResultsController 设置一个委托来处理编辑/删除行来处理该问题,但是在开发的这个阶段,如果可能的话,我只想要一个简单的解决方案来为这些删除的对象设置动画。
如何在从 managedObjectContext 中删除对象之前/之后为删除行设置动画?
编辑:我尝试在从 mOC 中删除项目之前和之后使用 deleteRowsAtIndexPaths,但出现相同的错误。
【问题讨论】:
标签: iphone cocoa-touch core-data uitableview