撤消托管对象删除

Posted

技术标签:

【中文标题】撤消托管对象删除【英文标题】:Undo managed object deletion 【发布时间】:2015-09-13 12:48:04 【问题描述】:

我在 MagicalRecord 提供的默认 MOC 上设置了 NSUndoManager

[NSManagedObjectContext MR_defaultContext].undoManager = [[NSUndoManager alloc] init];

当用户在我的表格视图中滑动删除时,我只需删除对象并将更改持久保存到根上下文:

[MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext) 
  NSManagedObject *model = [modelFromMainThread MR_inContext:localContext];
  [model MR_deleteEntityInContext:localContext];
];

当用户摇动设备以撤消删除时,我只需调用[defaultContext undo]

这工作得很好,对象复活,NSFetchedResultsController 将其拾取并添加回表格视图。

但是,当我编辑复活的对象时会出现问题。一旦我保存它,它就会再次消失。

我在这里想念什么让它正常工作吗?

我是否必须将撤消操作保留回根上下文?

【问题讨论】:

是的,一定要坚持。本质上,您应该执行与删除它时相同的操作。 【参考方案1】:

当我撤消持久更改时,我应该将对象保存回持久存储,否则该对象将在下次合并时消失。

【讨论】:

以上是关于撤消托管对象删除的主要内容,如果未能解决你的问题,请参考以下文章

核心数据:托管对象与上下文一起保存后如何撤消操作

iOS 4 应用程序终止和撤消

CoreData NSUndoManager 关系问题

如何删除与另一个托管对象关联的托管对象

更新当前的 CoreData 条目

iPhone托管对象删除崩溃