2010-11-05 21 views
2

我正在開發Mac上使用其C++插件API的FileMaker Pro 11 Advanced插件。我想在屏幕上顯示一個通過XIB文件加載的NSWindow,但是如果沒有在XIB文件中將窗口的「Visible at Launch」屬性設置爲YES,我無法顯示窗口。如何在插件Cocoa應用程序只公開C++ API時在插件中顯示窗口?

我想:

[window makeKeyAndOrderFront:NSApp]; 

的問題是,這並沒有使窗口出現在屏幕上。我也曾嘗試:

[window makeKeyAndOrderFront:windowController]; 

和:

[window makeKeyAndOrderFront:window]; 

和:

[window makeKeyAndOrderFront:nil]; 

我是很新的Objective-C和可可,所以我仍然在學習如何創建基本的東西Mac上的GUI。但是,我不確定我的窗口控制器,我的窗口,甚至是「掛鉤到」FileMaker Pro中;即我不知道我的NSApp是否與FileMaker的NSApp相同。這是一個愚蠢的問題?

當「啓動時可見」設置爲YES時,NSWindowController如何在屏幕上成功顯示窗口​​?我不想繼續使用那個屬性來讓我的窗口在屏幕上!

回答

0

所以你試圖從碳應用程序顯示一個可可窗口。你先打電話給NSApplicationLoad嗎?有關更多詳細信息,請參閱蘋果網站上的CarbonCocoaIntegration.pdf

0

你的例子中'窗口'是什麼?我期望代碼爲使用

[windowController.window makeKeyAndOrderFront: nil] 

[self.window makeKeyAndOrderFront: nil]; 

(或NSApp表示,而不是NIL或什麼的,發件人此處無關緊要,它忽略,只有接收器相關) 。 NSWindowController懶惰地加載它的窗口,所以XIB在你調用窗口之前不會被加載。你沒有直接訪問_window(或self - > _ window),實例變量,對吧?因爲在第一次調用窗口之前,這隻會是無效的。另外,正如Jan已經提到的,FileMaker非常非常老,很可能尚未更新爲使用Cocoa作爲其用戶界面。你可以混合使用Carbon(FileMaker可能還在寫入)和Cocoa,但是有很多小問題和疑難雜症,所以我不推薦使用它,特別是當你剛接觸Cocoa時。你必須學習Carbon和Cocoa來排除你正在做的很多事情。

順便說一句 - 不要使用NSApp。使用[NSApplication sharedApplication],它將確保你得到一個NSApplication對象。如果在任何人曾經稱之爲[NSApplication sharedApplication]之前調用它,NSApp可能爲NIL。再如Jan提到的,對於Carbon/Cocoa集成,您可能需要調用函數NSApplicationLoad(),因此Carbon知道您現在將在其中創建一些可可窗口。但仍然無法幫助您使用菜單欄,但仍然是Carbon。

FileMaker SDK是否提供了創建窗口的規定?您可能不得不辭去自己編寫代碼以對抗其C++ SDK。或者,創建一個獨立的Cocoa應用程序,創建您的窗口並完成工作,創建一個小C++插件,它只需啓動該應用程序,將其傳遞給數據(例如將其寫入文件或將AppleEvent發送給您應用程序或通過使用分佈式對象發送信息),然後在某個時刻知道如何從應用程序中檢索數據並將其交還給FileMaker。

相關問題