2011-03-28 39 views
3

我開發了一個適用於Mac OS X的Cocoa應用程序。我想製作一些自定義插件(也包含接口)並在我的應用程序中動態加載它們。我的應用程序應該查看一個文件夾並檢索所有文件(插件),並使其在用戶界面中可用。在Cocoa應用程序中動態加載自定義插件(庫)

有人可以建議我一個出發點嗎?

我該如何動態加載它們,插件必須是動態庫或某物?

謝謝。

回答

4

你想看看NSBundle。一個可加載的bundle(一個Framework是一個可加載的bundle)項目將產生你想要的。如果您將該包的principleClass屬性設置爲您的插件的頂級類,那麼您可以從加載的包中檢索該類的實例。你可以在給定路徑上加載一個包

id bundle = [NSBundle bundleWithPath:pathToBundle]; 
NSError *err; 
if(![bundle loadAndReturnError:&err]) { 
    // err contains error info 
} else { 
    // bundle loaded properly 
    Class pluginClass = [bundle principleClass]; 
    // instantiate pluginClass and off you go... 
} 
+1

這個。您也可以查看一個包的Info.plist,以獲取其名稱以顯示在插件菜單上,例如,無需加載其代碼 - 這就是爲什麼loadAndReturnError:是創建NSBundle對象時不會自動完成的單獨步驟的原因。如果您有很多插件,只需少量插件就可以用於任何給定的會話,那麼按需延遲加載代碼會很有用。 – 2011-03-28 16:21:31

+0

感謝 - 非常有用 – Vassilis 2011-03-28 21:21:10

+1

有一個專門的章節,[插件體系結構](https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/LoadingCode/Concepts/Plugins.html)* *在Apple的[代碼加載編程主題](https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/LoadingCode/LoadingCode.html#//apple_ref/doc/uid/10000052-SW1)指南中 – Jay 2013-06-06 05:46:43

相關問題