为什么在基于文档的应用程序中[self undoManager]
子窗口中为零?
它不应该引用其父窗口的撤消管理器吗?在父窗口中,我得到了撤消管理器的实际地址!
undoManager
不是 NSWindowController 的成员。这只是 NSDocument 的一个"功能"。
摘自NSDocument文档:...文档管理其窗口的已编辑状态,并设置为执行撤消和重做操作。....
"子类化 NSDocument"部分:
....子类还负责创建管理文档窗口的窗口控制器以及撤消和重做实现。....
您编写的代码不适用于其他强类型语言,因为您会向不存在的对象发送消息。我很确定你应该在这里有一个编译器警告。
希望这有帮助,
最好
弗洛
Flo的回答是一个很好的起点。一段时间后,事实证明响应者链以某种方式起作用(或者,可能是我:-))。
由 NSWindowController
控制的子窗口应自动 (??) 具有文档属性,以便[self document]
返回与此窗口关联的文档。很容易从中拉出撤消管理器。
但是,在我的应用程序(以及小型测试应用程序中)中,未设置此文档。当我从文档([newWindow setDocument:self]
)中手动设置它时,一切正常:注册撤消/重做操作,菜单栏等。