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
挂钩。
我正在使用 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
挂钩。