ios - 删除 NSFetchedResultsController 中的对象

标签 ios objective-c uitableview nsfetchedresultscontroller

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

我正在为我的应用程序使用 iOS 主从应用程序模板,当我从主页面转到详细信息页面时遇到问题。 我的问题是为什么 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;
    }
}

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

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

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

最佳答案

好的,首先。 NSFetchedResultsController 不会删除任何内容。它根本不对数据存储进行任何更新。它所做的一切都是获取对象并观察变化。

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

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

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

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

关于ios - 删除 NSFetchedResultsController 中的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21332923/

相关文章:

ios - 调整 UITableViewCell 的 NSLayoutConstraint 错误

objective-c - 使用 iOS Dropbox SDK 分块上传核心数据

ios - MKMapView 中的所有 Annotation 对用户不可见

ios - 在我的 Swift 项目中实现一个 Obj-C 类

iOS 10 自定义单元格颜色 alpha 被忽略

ios - iPhone X 自定义导航无法正确显示

ios - 是否可以将QRCode图像解码为值

ios - 使用 animationImages 为 UIButton 设置动画会在动画完成后更改按钮状态淡入淡出

iOS:动态显示/隐藏 UI 元素

swift - 通过键检索 Firebase 对象