2012-10-12 37 views
2

我的工作我的第一個Cocoa應用程序,並且我希望非常多,什麼是「無法加載窗口榫文件」是什麼意思?

[NSWindowController loadWindow]: failed to load window nib file 'Genius Document' 

意味着有一些非常具體的我做錯了,因爲如果我要回去重做所有的綁定我想要自殺。

FWIW,我與具有(到目前爲止)基於文件的應用程序只有一個XIB文件並沒有NIB文件的工作。

我可以張貼我的綁定代碼/截圖,但情況下是沒有必要的,我不想讓人們涉水通過他們。

感謝您的幫助。

+0

如果你有XIB文件,爲什麼你會想要做NIB文件(我甚至不知道是否有可能從現代版本的Xcode創建它們)?另外,你是否以編程方式或通過XIB實例化窗口控制器? –

+0

假設你使用'NSWindowController'的一些子類,你的'init'(或類似的)方法是什麼樣的?你在創建課程時是否創建了一個'xib'? –

+0

您是否在initWithWindowNibName:方法中提供了xib名稱作爲「foobar.xib」或只是「foobar」?如果它在磁盤上被命名爲「foobar.xib」,它應該是代碼中的「foobar」。我之所以提到這一點,是因爲它之前已經知道要把我絆倒。 – Mel

回答

3

你最終描述的錯誤發生的原因調用加載筆尖文件失敗。確保您爲Interface Builder文件提供了正確的名稱。

您可以通過多種方式提供正確的值(取決於您使用了AppKit的),所以我會制定出最常見的兩種可能性,你可以跟蹤哪一個適用於您。鑑於你在問題中所說的話,我懷疑你會處理第一種情況。

NSDocument windowNibName

如果你是依靠文檔架構的默認設置,你可能不會直接使有問題的電話。相反,該框架以您的名義號召,利用你在給定的文檔類指定任何筆尖的名字。例如,如果要使用文檔類「XYZDocument」創建一個新的基於文檔的項目,則Xcode模板將爲您提供一個基本的XYZDocument類和一個XYZDocument.xib文件。該XYZDocument實施文件將在它下面:

// XYZDocument.m 

- (NSString *)windowNibName { 
    return @"XYZDocument"; // this name tells AppKit which nib file to use 
} 

如果你要改變這個值,你會創建[NSWindowController loadWindow]錯誤。

NSWindowController初始化方法

如果您正在這個叫自己(也許是對自己的NSWindowController子類),那麼你就已經寫類似下面的一行。

// XYZWindowController.m (a subclass of NSWindowController) 

- (id)init { 
    self = [super initWithWindowNibName:@"XYZDocument"]; 
    if (self) { 
     // initializations 
    } 
    return self; 
} 

如果您提供的字符串參數與nib文件的名稱不匹配,則會發生相同的錯誤。

0

我在Xcode中運行了一個Clean(Cmd-Shift-K),併爲我解決了這個問題。