iOS /核心数据/滑动删除:为什么以下代码不起作用?

时间:2015-04-14 16:50:25

标签: ios core-data swipe-gesture

我正在尝试使用以下代码轻扫以删除以处理核心数据,但它无法正常工作。我意识到只有一种方法需要遵循以下两种方法,但我无论如何都无法使用它。如果有人能发现错误,我将不胜感激。提前感谢任何建议。

    //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];

    }

1 个答案:

答案 0 :(得分:0)

你的两种做法完全相同(唯一不同的是演员),所以不会帮助你。

首选方法是实施NSFetchedResultsController委托。从上下文中删除对象时,将调用委托方法controller:didChangeObject:...。标准实现(Xcode模板:Master-Detail,检查Core Data)将按预期删除行(通过deleteRowsAtIndexPaths:)。

如果您不使用委托方法(不推荐),则必须在deleteRowsAtIndexPaths中自己致电commitEditingStyle