从筛选的tableview中删除Core Data项会导致崩溃

时间:2015-03-26 20:40:44

标签: ios objective-c uitableview

我有一个带有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];

}

1 个答案:

答案 0 :(得分:0)

我无法一眼发现您的代码中的错误。但是,如果您仍在使用CoreData,我建议您熟悉NSFetchedResultsController。它是一个对象,用于管理对符合特定条件的某些ManagedObjects的连续提取/跟踪更改。它可以很好地与TableView集成,让您基本上免费删除/添加行动画。您为其提供了一个上下文来获取数据和谓词(NSFetchedResultsController要考虑的对象必须满足的条件)。然后它跟踪对这些对象所做的更改,并为您提供方便的API调用,以设置行添加/删除/重新加载动画。

以下是非常详细教程,描述了它的用法:http://www.raywenderlich.com/999/core-data-tutorial-for-ios-how-to-use-nsfetchedresultscontroller