撤消管理器是零 - 为什么?

时间:2012-06-27 06:25:17

标签: macos cocoa nsundomanager

为什么[self undoManager]在基于文档的应用中的子窗口中为零?

它不应该引用其父窗口的撤消管理器吗?在父窗口中,我获得了撤消管理器的实际地址!

2 个答案:

答案 0 :(得分:4)

undoManager不是NSWindowController的成员。 这只是一个NSDocument“功能”。

NSDocument文档的摘录: ...文档管理其窗口的编辑状态,并设置为执行撤消和重做操作。 ....

“Subclassing NSDocument”部分:

....子类还负责创建管理文档窗口以及执行撤消和重做的窗口控制器。 ....

您编写的代码不适用于其他强类型语言,因为您会向不存在的对象发送消息。我很确定你应该在这里有一个编译器警告。

希望这有帮助,

最好的,

弗洛

答案 1 :(得分:0)

弗洛的答案是一个很好的起点。一段时间后,事实证明响应者链在某种程度上起作用(或者,可能是我:-))。

NSWindowController控制的子窗口应自动(??)具有文档属性,以便[self document]返回与此窗口关联的文档。从中撤出撤销管理器很容易。

但是,在我的应用程序中(以及在小型测试应用程序中),此文档未设置。当我从文档([newWindow setDocument:self])中手动设置它时,一切正常:注册撤消/重做动作,菜单栏等。