删除NSFetchedResultsController中的对象

时间:2014-01-24 12:37:21

标签: ios objective-c uitableview nsfetchedresultscontroller

我需要就以下问题提出一些建议:

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

- (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;
    }
}

但是在我的情况下我想要做以下事情,即当用户通过从右边滑动表格单元来删除对象时我也从服务器删除对象,这在有单个表格视图并且没有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];
            }

1 个答案:

答案 0 :(得分:3)

好的,第一件事。 NSFetchedResultsController不会删除任何内容。它根本不对数据存储进行任何更新。所有这一切都是为了获取对象并注意变化。

听起来好像是在混淆tableview删除行并删除数据存储中的内容。

除了更新表之外,你不应该真正改变NSFetchedResultControllerDelegate方法做任何事情。

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

如果您在background thread(和背景上下文)上进行删除,那么NSFRC将接收更改并从表中删除该单元格。