2014-02-27 41 views
3

我對NSUndoManager方法我應該使用模型對象作爲NSUndoManager的目標嗎?

  • registerUndoWithTarget:selector:object:

  • prepareWithInvocationTarget:

通常在實例的問題, 「目標」 是管理所有的模型對象控制器對象(通常在一個數組中)。

但是,目標可以是單個模型對象 - 要通過撤銷/重做操作更改模型對象嗎?


guide說,大約registerUndoWithTarget:selector:object:

目標對象可以不是實際的對象,其狀態正在改變;相反,它可能是客戶端對象,一個包含許多可撤銷對象的文檔或容器。

爲什麼這個限制?它在方法本身的文檔中沒有提及。另外,對於prepareWithInvocationTarget:方法沒有提及這樣的限制。

+1

如果您刪除一個對象並將其用作目標 - 如果目標現在消失,撤消工作怎麼辦?您將需要一些其他實例來編排操作**以獲取**實際更改的對象 – cacau

回答

1

您引用的文檔有點含糊不清。我會讀這:

目標對象可能不是實際對象的狀態是 改變;相反,它可能是客戶端對象,一個容納許多可撤銷對象的文檔或容器。

就象這樣:

目標對象可能不是實際的對象,它的狀態是 改變;相反,它可能是客戶對象,文檔或 容器擁有許多可撤銷的對象

然而,它通常最好不要使用模型作爲目標。目標不被保留,因此可以在撤消堆棧上仍然引用它時解除分配。針對擁有撤銷管理器的控制器是個好主意。

相關問題