删除 NSFetchedResultsController 中的对象

Uma*_*air 0 objective-c uitableview nsfetchedresultscontroller ios

我需要一些关于以下问题的建议:

我正在为我的应用程序使用 iOS Master Detail 应用程序模板,当我从主页面转到详细信息页面时遇到问题。我的问题是为什么NSFetchedResultsChangeDelete在 segueing 时触发?

- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject
       atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type
      newIndexPath:(NSIndexPath *)newIndexPath
{
    UITableView *tableView = self.tableView;
    List *list = nil;

    switch(type) {
        case NSFetchedResultsChangeInsert:
            [tableView insertRowsAtIndexPaths:@[newIndexPath] withRowAnimation:UITableViewRowAnimationFade];
            break;

        case NSFetchedResultsChangeDelete:

                [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];

            break;

        case NSFetchedResultsChangeUpdate:
            [self configureCell:[tableView cellForRowAtIndexPath:indexPath] atIndexPath:indexPath];
            break;

        case NSFetchedResultsChangeMove:
            [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
            [tableView insertRowsAtIndexPaths:@[newIndexPath] withRowAnimation:UITableViewRowAnimationFade];
            break;
    }
}
Run Code Online (Sandbox Code Playgroud)

但在我的情况下,我想执行以下操作,即当用户通过从右侧滑动表格单元格删除对象时,我也从服务器中删除对象,这在有单个表格视图且没有 segueing 时效果很好。如果我NSFetchResutlsController在查看如下详细信息时阻止表单删除对象,那么在从详细信息视图返回后,表格视图单元格不会响应我的点击事件。即表不继续,点击时没有任何反应,

任何人都可以指导这里出了什么问题吗?我应该如何正确实现此功能?

case NSFetchedResultsChangeDelete:
            list = (List*)anObject;
            BOOL visible = [self.navigationController.topViewController isKindOfClass:[RKGMasterViewController class]];

            if(list.listSyncStatus == [NSNumber numberWithInt:1] &&  visible) 
            {
                [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
                [self deleteDataFromServer:list];
            }
Run Code Online (Sandbox Code Playgroud)

Fog*_*ter 5

好的,第一件事。在NSFetchedResultsController不删除任何东西。它根本不对数据存储进行任何更新。它所做的一切都是获取对象并观察变化。

听起来您将tableview删除行与从数据存储中删除某些内容混淆了。

你真的不应该改变NSFetchedResultControllerDelegate方法来做比更新表更多的事情。

但是,当用户滑动单元格并点击时,Delete您应该从后台线程上的核心数据存储中删除相关数据。您还应该(作为此过程的一部分)发送从服务器中删除数据的请求。

如果您在background thread(和背景上下文)上执行删除操作,那么 NSFRC 将获取更改并为您从表中删除单元格。