【问题标题】:Should I use a model object as NSUndoManager's target?我应该使用模型对象作为 NSUndoManager 的目标吗?
【发布时间】:2014-02-27 09:27:41
【问题描述】:

我对 NSUndoManager 方法有疑问

  • registerUndoWithTarget:selector:object:

  • prepareWithInvocationTarget:

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

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


guide 说的是registerUndoWithTarget:selector:object:

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

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

【问题讨论】:

  • 如果您删除一个对象并将其用作目标 - 如果目标现在消失了,撤消如何工作?您将需要一些其他实例来编排操作 for 实际更改的对象

标签: objective-c cocoa nsundomanager


【解决方案1】:

您引用的文档有点模棱两可。我会读这个:

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

这样:

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

但是,通常最好不要将模型用作目标。目标未保留,因此可以在撤消堆栈上仍被引用时将其释放。以拥有撤消管理器的控制器为目标是个好主意。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-25
    • 1970-01-01
    • 2019-01-12
    • 1970-01-01
    • 2011-05-03
    • 2014-09-20
    • 2011-02-12
    相关资源
    最近更新 更多