核心数据 - 保存上下文后撤消更改

时间:2013-02-13 02:41:37

标签: ios core-data nsundomanager

我最近注意到Core Data中的撤消机制这个奇怪的事情,从那以后它一直困扰着我。

来自NSManagedObjectContext方法的-undo文档的引用:

  

向接收方的撤消管理器发送撤消消息,要求它撤消应用于对象图中对象的最新未提交更改。

要反转最新未提交的更改,听起来很简单,对吧?

然而,事实并非如此!即使我使用托管对象上的更改保存上下文,以下-undo调用仍将成功撤消更改。是不是反对文档中陈述的内容?

也许我做错了什么?如果需要,我可以发布我的小测​​试代码。我真的很困惑。

1 个答案:

答案 0 :(得分:4)

应该混淆。核心数据文档是一个热点。他们使用很多词,例如" uncommitted"可以说是不恰当的方式。它们似乎意味着当属性isFaulted等于NO时,它们表示"未提交"。

核心数据编程指南详细介绍:

  

更改和撤消管理

     

上下文保留对具有挂起的托管对象的强引用   更改(插入,删除或更新),直到发送上下文   save:,reset,rollback或dealloc消息,或者相应的消息   取消更改的撤消数量。

     

与上下文关联的撤消管理器保留对其的强引用   任何更改的托管对象。默认情况下,在OS X中上下文的撤消   manager保持无限制的undo / redo堆栈。 限制你的   应用程序的内存占用,你应该确保你擦洗   (使用removeAllActions)上下文的撤销堆栈   适当即可。除非你强烈引用上下文的撤消   经理,它的背景已被解除分配。

文档中的措辞/词汇不清晰或不一致。我相信您的用途是,您应该在适合您的应用程序时在上下文的removeAllActions属性上调用undoManager,以避免无限的内存增长。