[英]Loading Nib and Displaying Window in Objective C++
我正在嘗試使用Objective C ++從C ++構造函數加載Nib。 我已經搜索並找到足夠的示例來將一些代碼放在一起,但是它不顯示窗口。 或任何與此有關的窗口。
這是contructor的一個示例:
JokeSystem::JokeSystem() : fileSystem("/Library/Application Support/Jokes/")
{
try
{
randSystem = new RandSelect<std::string>
(fileSystem.getAllFileContents("%\n"));
}
catch (std::ifstream::failure)
{
NSWindowController * errorWindowControl = [[NSWindowController alloc]
initWithWindowNibName:@"ErrorWindow"];
[errorWindowControl showWindow: nil];
}
}
構造器的目的是將目錄的內容加載到字符串中。 我試圖做的是在文件無法打開時顯示錯誤窗口。
ErrorWindow.nib有一個帶有“確定”按鈕的窗口和一個用於錯誤的NSTextView
,我在該Nib中設置了一個NSWindowController
並將其連接到該窗口。
我唯一的鏈接是,大多數示例都顯示此[errorWindowControl showWindow: self]
; 而不是showWindow: nil
但是因為這是C ++構造函數,所以它沒有self
, this
不起作用。
如果很重要,可以從MainMenu.nib
的主要NSObject
的awakeFromNib
方法調用此構造方法。
謝謝
處理可可粉的方法有些奇怪。 我鼓勵您退一步,學習Objective-C,然后在您擁有的任何后備存儲或模型層之上,使用基於Objective-C的Cocoa UI層編寫應用程序。
無論如何,該代碼沒有什么特別的錯誤(保留用於奇數設計)。
首先要檢查的是-initWithWindowNibName:的返回值。 errorWindowControl實際上不是nil嗎? 如果為零,則NIB加載失敗。
您如何編寫Cocoa應用程序本身? 希望使用Xcode的標准應用程序捆綁包嗎?
另外,您不應該對/ Library / Application Support /的路徑進行硬編碼。 實際上,您的應用程序不應使用該目錄作為唯一的存儲位置。 如果沒有管理員訪問權限,許多用戶將無法對該目錄進行寫訪問,也無法安裝您的應用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.