Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 核心数据-保存上下文后撤消更改_Ios_Core Data_Nsundomanager - Fatal编程技术网

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

Ios 核心数据-保存上下文后撤消更改,ios,core-data,nsundomanager,Ios,Core Data,Nsundomanager,我最近注意到核心数据中的撤销机制有一个奇怪的地方,从那以后它一直困扰着我 引用NSManagedObjectContext文档中的-undo方法: 向接收方的撤销管理器发送撤销消息,要求其撤销应用于对象图中对象的最新未提交更改 要撤销最新未提交的更改,听起来很简单,对吗 然而,事实并非如此!即使我在托管对象上保存了带有更改的上下文,下面的-undo调用仍将成功地撤消更改。这不是违反了文件中的规定吗 也许我做错了什么?如果需要,我可以发布我的小测试代码。我真的很困惑。你应该感到困惑。核心数据文档非

我最近注意到核心数据中的撤销机制有一个奇怪的地方,从那以后它一直困扰着我

引用
NSManagedObjectContext
文档中的
-undo
方法:

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

要撤销最新未提交的更改,听起来很简单,对吗

然而,事实并非如此!即使我在托管对象上保存了带有更改的上下文,下面的
-undo
调用仍将成功地撤消更改。这不是违反了文件中的规定吗

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

你应该感到困惑。核心数据文档非常混乱。他们用了很多像“未承诺”这样的词,但可以说是不恰当的。它们似乎是指属性
出现故障的对象,当它们说“未提交”时,属性
等于否

《核心数据编程指南》详细介绍了以下内容:

更改和撤消管理 上下文保留对已挂起的托管对象的强引用 更改(插入、删除或更新),直到发送上下文 保存:、重置、回滚或解除锁定消息,或相应的 撤消更改的撤消次数

与上下文关联的撤消管理器保留对上下文的强引用 任何已更改的托管对象。默认情况下,在OSX中,上下文的撤消 manager保留一个不受限制的撤消/重做堆栈以限制您的 应用程序的内存占用,您应该确保 (使用
removeAllActions
)上下文的撤消堆栈在 适当的
。除非您保留对上下文撤消的强引用 管理器,它将处理其上下文


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

嗯,我想这是有道理的。。。不过,遗憾的是,他们没有太注意措辞。整个核心数据撤销管理感觉有点神奇,因此需要一个好的、深思熟虑的解释。我花了一段时间才弄明白他们为什么会用这个词。