我应该将模型对象用作NSUndoManager的目标吗?

时间:2014-02-27 09:27:42

标签: objective-c cocoa nsundomanager

我对NSUndoManager方法有疑问

  • registerUndoWithTarget:selector:object:

  • prepareWithInvocationTarget:

通常在示例中,“target”是管理所有模型对象(通常在数组中)的控制器对象。

但是目标可以是单个模型对象 - 撤消/重做操作要更改的模型对象吗?


guideregisterUndoWithTarget:selector:object:

  

目标对象可能不是状态正在改变的实际对象;相反,它可能是客户端对象,包含许多可撤销对象的文档或容器。

为什么这个限制?方法本身的文档中没有提到它。此外,prepareWithInvocationTarget:方法没有提到这样的限制。

1 个答案:

答案 0 :(得分:1)

你引用的文档有点含糊不清。我会读到这个:

  

目标对象可能不是状态为的实际对象   改变;相反,它可能是客户端对象,文档或   容纳许多可撤销对象的容器。

这样:

  

目标对象可能不是状态为的实际对象   改变;相反,它可能是客户端对象,文档或   容纳许多可撤销对象的容器

但是,通常最好不要将模型用作目标。目标未保留,因此可以在仍然在撤消堆栈上引用的情况下取消分配。定位拥有撤消管理器的控制器是个好主意。