我有一个带有SearchBar的TableViewController,显示了一个国家/地区列表。用户可以添加自己的并删除它们。从tableview中正常删除工作正常但是当我使用uisearchbar过滤列表并尝试删除其中一个条目时,删除动画不起作用,当我选择后退按钮时系统崩溃。 这是我的commitEditingStyle代码:
if (editingStyle == UITableViewCellEditingStyleDelete) {
[self.tableView beginUpdates]; // Avoid NSInternalInconsistencyException
Country *countryToDelete;
if (self.searchDisplayController.active) {
//get the country object from the filtered results
countryToDelete = [self.countryResults objectAtIndex:indexPath.row];
//delete the selected item from the filtered results
[self.countryResults removeObject:countryToDelete];
//delete the row which corresponds to the deleted filtered item
[self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
withRowAnimation:UITableViewRowAnimationFade];
} else {
countryToDelete = [self.fetchedResultsController objectAtIndexPath:indexPath];
[self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
withRowAnimation:UITableViewRowAnimationFade];
}
[self.managedObjectContext deleteObject:countryToDelete];
[self.managedObjectContext save:nil];
[self.tableView endUpdates];
}
答案 0 :(得分:0)
我无法一眼发现您的代码中的错误。但是,如果您仍在使用CoreData,我建议您熟悉NSFetchedResultsController
。它是一个对象,用于管理对符合特定条件的某些ManagedObjects
的连续提取/跟踪更改。它可以很好地与TableView集成,让您基本上免费删除/添加行动画。您为其提供了一个上下文来获取数据和谓词(NSFetchedResultsController
要考虑的对象必须满足的条件)。然后它跟踪对这些对象所做的更改,并为您提供方便的API调用,以设置行添加/删除/重新加载动画。
以下是非常详细教程,描述了它的用法:http://www.raywenderlich.com/999/core-data-tutorial-for-ios-how-to-use-nsfetchedresultscontroller