我对NSUndoManager方法有疑问
-
registerUndoWithTarget:selector:object:
-
prepareWithInvocationTarget:
示例中,"目标"是管理所有模型对象(通常在数组中)的控制器对象。
但是目标是否可以是单个模型对象 - 要通过撤消/重做操作更改的模型对象?
该指南说registerUndoWithTarget:selector:object:
:
目标对象可能不是状态正在更改的实际对象;相反,它可能是客户端对象,即包含许多可撤消对象的文档或容器。
为什么会有这个限制?方法本身的文档中未提及它。此外,对于prepareWithInvocationTarget:
方法,也没有提到此类限制。
你引用的文档有点模棱两可。我会读到这个:
目标对象可能不是状态为 改变;相反,它可能是客户端对象、文档或 包含许多可撤消对象的容器。
如:
目标对象可能不是状态为 改变;相反,它可能是客户端对象、文档或 包含许多可撤消对象的容器
但是,通常最好不要使用模型作为目标。目标不会保留,因此可以在撤消堆栈上仍引用时将其解除分配。以拥有撤消管理器的控制器为目标是一个好主意。