NSFetchedResultsController - 删除行 - 如何在行删除之前访问托管对象?

NSFetchedResultsController - deleting rows - How to get access to managed object before row deletion?

我正在使用 NSFetchedResultsController 来显示我的核心数据,并且我还在无处不在的文档容器中有一个用户生成的图像,对于 fetchedResultsController 显示的每个托管对象。

我已经在 TableView 上实现了向左滑动以删除功能,但是在 fetchedResultsController 删除我的对象之前我无法访问托管对象。我还需要此访问权限才能删除我的 iCloud 容器中用户生成的图像。

这是我正在使用的函数:

func controller(controller: NSFetchedResultsController!, didChangeObject anObject: AnyObject!, atIndexPath indexPath: NSIndexPath!, forChangeType type: NSFetchedResultsChangeType, newIndexPath: NSIndexPath!) {
            switch type
            {
                case .Insert:
                    tableView.insertRowsAtIndexPaths([newIndexPath], withRowAnimation: .Automatic)
                case .Delete:
                    tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Automatic)
                default:
                    break
                }
  }

我已经 运行 测试,但我无法使用 anObject、indexPath 或 newIndexPath 引用已删除的对象。

如有任何帮助,我们将不胜感激! 谢谢, 阁楼

您是否可以通过此回调拦截 table 查看行删除命令?

// After a row has the minus or plus button invoked (based on the UITableViewCellEditingStyle for the cell), the dataSource must commit the change
// Not called for edit actions using UITableViewRowAction - the action's handler will be invoked instead
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath;

正如 header 评论指出的那样,如果您使用的是 UITableViewRowActions,则无法使用此回调。

如果您正在使用行操作,那么我相信您应该能够在处理程序中拦截删除命令:

+ (instancetype)rowActionWithStyle:(UITableViewRowActionStyle)style title:(NSString *)title handler:(void (^)(UITableViewRowAction *action, NSIndexPath *indexPath))handler;

为什么管理员负责删除数据?其他controller删除managed object,也得实现image删除?几乎不是一个好的解决方案。

我认为拦截托管对象子类中的删除并确保图像也被删除会更有意义。您可以使用托管对象的 prepareForDeletion 挂钩。