iOS/coredata/swipe to delete:为什么下面的代码不起作用?
我正在尝试使用下面的代码让swipetore处理核心数据,但它不起作用。我意识到,当只需要一种方法时,有两种方法可供遵循,但无论如何我都无法让它发挥作用。如果有人能找出问题所在,我将不胜感激。提前感谢您的建议iOS/coredata/swipe to delete:为什么下面的代码不起作用?,ios,core-data,swipe-gesture,Ios,Core Data,Swipe Gesture,我正在尝试使用下面的代码让swipetore处理核心数据,但它不起作用。我意识到,当只需要一种方法时,有两种方法可供遵循,但无论如何我都无法让它发挥作用。如果有人能找出问题所在,我将不胜感激。提前感谢您的建议 //enables swipe to delete - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowA
//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];
}
你的两种方法做完全相同的事情(唯一的区别是演员阵容),所以这对你没有帮助 首选方法是实现
NSFetchedResultsController
委托。从上下文中删除对象时,将调用委托方法controller:didChangeObject:…
。标准实现(Xcode模板:Master Detail,check Core Data)只需按预期删除行(通过deleteRowsAtIndexPaths:
)
如果不使用委托方法(不推荐),则必须在
committeeditingstyle
中自己调用deleteRowsAtIndexPaths
哪一部分不起作用?未删除对象或未更新表?两者都没有。该表没有反映出之后的任何变化。当您关闭模拟器并重新打开时,该项仍然存在,因此它显然仍然位于底层数据库(sqllite)中保存上下文时是否有错误?没有。只是没有被删除。它似乎在NS日志输出中获得了正确的行。我实现nsfetchedresultscontrollerdelegate的方式肯定有问题,因为它不起作用。(我的头文件中确实有NSFetchedResultsControllerDelegate。)我将尝试从master detail复制代码,看看这是否能解决问题。