Ios 核心数据-保存上下文后撤消更改
我最近注意到核心数据中的撤销机制有一个奇怪的地方,从那以后它一直困扰着我 引用Ios 核心数据-保存上下文后撤消更改,ios,core-data,nsundomanager,Ios,Core Data,Nsundomanager,我最近注意到核心数据中的撤销机制有一个奇怪的地方,从那以后它一直困扰着我 引用NSManagedObjectContext文档中的-undo方法: 向接收方的撤销管理器发送撤销消息,要求其撤销应用于对象图中对象的最新未提交更改 要撤销最新未提交的更改,听起来很简单,对吗 然而,事实并非如此!即使我在托管对象上保存了带有更改的上下文,下面的-undo调用仍将成功地撤消更改。这不是违反了文件中的规定吗 也许我做错了什么?如果需要,我可以发布我的小测试代码。我真的很困惑。你应该感到困惑。核心数据文档非
NSManagedObjectContext
文档中的-undo
方法:
向接收方的撤销管理器发送撤销消息,要求其撤销应用于对象图中对象的最新未提交更改
要撤销最新未提交的更改,听起来很简单,对吗
然而,事实并非如此!即使我在托管对象上保存了带有更改的上下文,下面的-undo
调用仍将成功地撤消更改。这不是违反了文件中的规定吗
也许我做错了什么?如果需要,我可以发布我的小测试代码。我真的很困惑。你应该感到困惑。核心数据文档非常混乱。他们用了很多像“未承诺”这样的词,但可以说是不恰当的。它们似乎是指属性出现故障的对象,当它们说“未提交”时,属性等于否
《核心数据编程指南》详细介绍了以下内容:
更改和撤消管理
上下文保留对已挂起的托管对象的强引用
更改(插入、删除或更新),直到发送上下文
保存:、重置、回滚或解除锁定消息,或相应的
撤消更改的撤消次数
与上下文关联的撤消管理器保留对上下文的强引用
任何已更改的托管对象。默认情况下,在OSX中,上下文的撤消
manager保留一个不受限制的撤消/重做堆栈以限制您的
应用程序的内存占用,您应该确保
(使用removeAllActions
)上下文的撤消堆栈在
适当的。除非您保留对上下文撤消的强引用
管理器,它将处理其上下文
文件中的措辞/词汇不清楚或不一致。我相信预期的用法是,在适合您的应用程序时,您应该在上下文的undoManager
属性上调用removeAllActions
,以避免无限的内存增长 嗯,我想这是有道理的。。。不过,遗憾的是,他们没有太注意措辞。整个核心数据撤销管理感觉有点神奇,因此需要一个好的、深思熟虑的解释。我花了一段时间才弄明白他们为什么会用这个词。