3

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

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

4

2 回答 2

4

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

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

“子类化 NSDocument”部分:

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

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

希望这可以帮助,

最好的,

弗洛

于 2012-06-27T10:34:41.283 回答
0

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

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

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

于 2012-06-27T14:46:23.623 回答