我正在使用自定義子類NSDocument
和自定義子類NSWindowController
。問題是我無法從我的自定義窗口控制器中引用我的自定義文檔。在NSWindowController子類中,[self document]返回null
在IB中,在TKDocument
NIB中,我將文件所有者設置爲TKWindowController
。
在我TKDocument
子,我有:(在TKWindowController
再次)
- (void) setDocument(NSDocument *) document {
NSLog(@"setDocument:%@", document);
[super setDocument:document];
}
,然後我的行動:
- (void) makeWindowControllers {
TKWindowController *controller = [[TKWindowController alloc] init];
[self addWindowController:controller];
}
然後在我的TKWindowController
子我推翻setDocument
,以確保它被稱爲其中引用文件本身:
- (IBAction) plotClicked:(id) sender {
TKDocument *doc = [self document];
NSLog(@"plotClicked %@", doc);
}
如我所料,NSLog輸出我的[TKDocument description]
覆蓋返回的字符串;我只是把它放在那裏看看它是否被調用。但是,doc
在plotClicked
爲空。
我可能做錯了什麼?
編輯:我相信問題是與NIBs。如上所述,我的文檔擁有自己的NIB,並將文件所有者設置爲自定義控制器。從MainMenu.xib中的菜單項觸發plotClicked
操作。我相信它正在創建一個與當前活動文檔無關的新控制器實例。
那麼,我如何鏈接兩個?我的問題是這樣的:如何從MainMenu.xib獲取當前活動文檔(或其窗口控制器)的句柄?
感謝
彼得,謝謝。我確實有一個窗口控制器,隨後我將其移除。我現在已經將菜單項連接到First Responder,它現在可以工作。我不確定*爲什麼*它的工作原理:我知道該事件正在流向響應者鏈,但在窗口控制器上的操作plotClicked在文檔筆尖中未連接。我需要閱讀更多關於這個。 – 2010-09-07 17:33:57
你說文件的所有者應該是文件。使用自定義窗口控制器的情況仍然如此嗎?如果是這樣,我如何訪問NIB中的控制器?我不認爲在文檔NIB中實例化自定義窗口控制器是正確的。感謝您先前明確回答了一個非常模糊的問題。 – 2010-09-07 17:36:40
您不需要在任何nib中實例化窗口控制器,因爲它的任務是加載nib。爲什麼要從筆尖中的物體訪問控制器,而不是文檔? – 2010-09-07 17:38:38