2010-05-09 28 views
6

我在使用庫和包含xib文件時遇到了一些麻煩。首先讓我解釋我的情況。我有一個運行良好的項目。現在,我需要將我的項目的一部分作爲另一位想要在其應用程序中使用某些功能的客戶的庫。我在that高度推薦文章的幫助下創建了一個庫。在庫中使用xib文件時遇到問題

我的客戶應該能夠初始化主視圖控制器是這樣的:

LibraryMainViewController *lmvc = [[LibraryMainViewController alloc] initWithNibName:@"LibraryMainViewController.xib" bundle:foo]; 

這肯定會導致錯誤,當我嘗試呈現視圖控制器模態。我不確定我必須在這裏使用什麼捆綁包。我試過類似

[NSBundle bundleForClass:[SomeClassInTheLibrary class]]; 

但這並沒有解決問題。

如果有人能告訴我如何在這種情況下實際使用xib文件,我會很高興。

感謝
-f

更新

好吧,我看到我聽錯了莫名其妙。只是澄清:我需要的是圖書館,標題和額外的資源,對嗎?是否有某種最佳做法來創建和發佈上述所有零件的「特徵」?

回答

6

靜態庫不能包含圖形,聲音,xib甚至頭文件。只有對象代碼。即使您將xib添加到「複製包資源」中,它們也不會成爲對象文件的一部分。不幸的是,你不能在iPhone上使用動態庫或框架。有關如何創建單獨資產包的建議,請參閱my answer here。您也可以將您的客戶分開發送xib文件,但如果將來他們需要更換,他們必須手動更換。

+0

所以如果我這樣做,我不得不把我的客戶庫,頭文件和捆綁包與xib文件,對不對? – flohei 2010-05-09 10:46:27

+0

是的。例如,Facebook就是這樣做的。 (您可以按照鏈接到的問題中的鏈接。) – Felixyz 2010-05-09 20:21:35

0

嘗試不添加擴展到XIB文件。這就是我通常這樣做的方式。我也不確定XIB是否必須編譯爲NIB ..

NSBundle *bundle = [NSBundle bundleForClass:[SomeClassInTheLibrary class]]; 
LibraryMainViewController *lmvc = [[LibraryMainViewController alloc] initWithNibName:@"LibraryMainViewController" bundle:bundle]; 
+0

當我嘗試,我仍然得到一個錯誤說 2010-05-09 12:18:23.099的測試[6416:207] ***終止應用程序由於未捕獲的異常 'NSInvalidArgumentException',原因是:「 - [UIViewController _loadViewFromNibNamed:bundle:]無法加載名爲「LibraryMainViewController」的筆尖' 有沒有可能我沒有正確地將xib文件添加到該庫?我將它添加到「複製捆綁資源構建階段」。 – flohei 2010-05-09 10:22:17