我最近注意到Core Data中的撤消机制这个奇怪的事情,从那以后它一直困扰着我。
来自NSManagedObjectContext
方法的-undo
文档的引用:
向接收方的撤消管理器发送撤消消息,要求它撤消应用于对象图中对象的最新未提交更改。
要反转最新未提交的更改,听起来很简单,对吧?
然而,事实并非如此!即使我使用托管对象上的更改保存上下文,以下-undo
调用仍将成功撤消更改。是不是反对文档中陈述的内容?
也许我做错了什么?如果需要,我可以发布我的小测试代码。我真的很困惑。
答案 0 :(得分:4)
你应该混淆。核心数据文档是一个热点。他们使用很多词,例如" uncommitted"可以说是不恰当的方式。它们似乎意味着当属性isFaulted
等于NO时,它们表示"未提交"。
核心数据编程指南详细介绍:
更改和撤消管理
上下文保留对具有挂起的托管对象的强引用 更改(插入,删除或更新),直到发送上下文 save:,reset,rollback或dealloc消息,或者相应的消息 取消更改的撤消数量。
与上下文关联的撤消管理器保留对其的强引用 任何更改的托管对象。默认情况下,在OS X中上下文的撤消 manager保持无限制的undo / redo堆栈。 限制你的 应用程序的内存占用,你应该确保你擦洗 (使用
removeAllActions
)上下文的撤销堆栈 适当即可。除非你强烈引用上下文的撤消 经理,它的背景已被解除分配。
文档中的措辞/词汇不清晰或不一致。我相信您的用途是,您应该在适合您的应用程序时在上下文的removeAllActions
属性上调用undoManager
,以避免无限的内存增长。