我正在尝试使用以下代码轻扫以删除以处理核心数据,但它无法正常工作。我意识到只有一种方法需要遵循以下两种方法,但我无论如何都无法使用它。如果有人能发现错误,我将不胜感激。提前感谢任何建议。
//enables swipe to delete
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
// Remove the row from data model
//first approach
if (editingStyle == UITableViewCellEditingStyleDelete) {
// Delete object from manageobjectcontext
NSLog(@"should be deleting here");//this shows in log
[self.managedObjectContext deleteObject:[self.fetchedResultsController objectAtIndexPath:indexPath]];
NSError *error = nil;
if (![self.managedObjectContext save:&error]) {
// handle error
}
}
//second approach
// Delete the item
Items *itemToDelete = [self.fetchedResultsController objectAtIndexPath:indexPath];
NSLog(@"Deleting (%@)", itemToDelete.name);//this also shows in log
[self.managedObjectContext deleteObject:itemToDelete];
[[self tableView] reloadData];
}
答案 0 :(得分:0)
你的两种做法完全相同(唯一不同的是演员),所以不会帮助你。
首选方法是实施NSFetchedResultsController
委托。从上下文中删除对象时,将调用委托方法controller:didChangeObject:...
。标准实现(Xcode模板:Master-Detail,检查Core Data)将按预期删除行(通过deleteRowsAtIndexPaths:
)。
如果您不使用委托方法(不推荐),则必须在deleteRowsAtIndexPaths
中自己致电commitEditingStyle
。