2013-01-18 48 views
0

我有一個基於文檔的應用程序,建議使用建議的NSDocument/NSWindowController安裝程序。每個窗口都有自己的NSWindowController實例和關聯的XIB文件。界面在-(id)initif (self = [super initWithWindowNibName:@"DocumentWindow"]) { // yadda yadda }中相當簡單。 XIB文件包含一個對象,該對象表示一個單獨的控制器,每當用戶打開一個新窗口時應立即執行該控制器。它提供僅與當前文檔相關的數據。當我使用-(id)initWithWindowNibName:解壓對象時,儘管有兩個不同的窗口控制器,並且儘管調用了兩次,我總是可以獲得對同一個實例的引用。 XIB加載機制似乎只解壓同一個歸檔對象一次哪種類型是有意義的(真的?)。XIB文件中的對象的多個實例

除了在代碼中分配單獨的對象,手動加載視圖,計算它們的大小,將它們添加爲子視圖,然後設置綁定並關注當窗口關閉時手動解除綁定,還有沒有辦法?

因爲我自己的愚蠢,我正在撞牆。這隻會讓事情變得更糟。

+0

您確定所討論的對象實際上是在XIB中,而不是「文件所有者」(實際上不在XIB中)。 –

+0

該問題與XIB加載機制完全無關,請參閱下面的答案。 –

回答

1

正如我最初以爲我絕對走錯了路。問題很簡單,我在上述實例化類中註冊了一個對象,該對象是應用程序的子視圖keyWindow(我一起入侵併想稍後將其更改爲屬性,)。當應用程序加載時,所有實例都註冊了所有文檔窗口,並且所有實例都得到通知並計算出相同的數據。

今天調試器是我最好的朋友。

當你從XIB中取消存檔對象時,實際上沒有任何事情像優化,你總是會得到不同的實例(這在回顧過程中是絕對有意義的)。如果遇到類似的問題,那麼它可能是代碼中另一個地方的無關錯誤。