Nic*_*cky 7 core-data nsundomanager ios
我最近注意到Core Data中的撤销机制这个奇怪的事情,从那以后它一直困扰着我.
方法NSManagedObjectContext文档的引用-undo:
向接收方的撤消管理器发送撤消消息,要求它撤消应用于对象图中对象的最新未提交更改.
要扭转最新的未提交更改,听起来很简单吧?
然而,事实并非如此!即使我使用托管对象上的更改保存上下文,以下-undo调用仍将成功撤消更改.这不是针对文档中陈述的内容吗?
也许我做错了什么?如果需要,我可以发布我的小测试代码.我真的很困惑.
你应该感到困惑。Core Data 文档一团糟。他们以一种可以说是不恰当的方式使用了很多诸如“未承诺”之类的词。isFaulted当他们说“未提交”时,它们似乎表示属性等于 NO 的对象。
核心数据编程指南更详细:
更改和撤消管理
上下文保持对具有挂起更改(插入、删除或更新)的托管对象的强引用,直到上下文发送 save:、reset、rollback 或 dealloc 消息,或适当数量的撤消以撤消更改。
与上下文关联的撤消管理器保持对任何更改的托管对象的强引用。默认情况下,在 OS X 中,上下文的撤消管理器保持无限的撤消/重做堆栈。为了限制应用程序的内存占用,您应该确保
removeAllActions在适当的时候清理(使用)上下文的撤消堆栈。除非您保持对上下文的撤消管理器的强引用,否则它将与其上下文一起解除分配。
文档中的措辞/词汇不明确或不一致。我相信预期的用途是您应该在适合您的应用程序时调用removeAllActions上下文的undoManager属性,以避免无限的内存增长。
| 归档时间: |
|
| 查看次数: |
1860 次 |
| 最近记录: |