[英]iOS - loading xib from bundle in Documents directory
我一直致力於通過捆綁xib和下載軟件包以及在這些軟件包中加載xib來為我的iOS應用程序提供“自定義skinnable”界面。
我已按照這里非常有用的說明進行操作。
我有捆綁下載,解壓縮,可以看到xib文件。 我沒有在示例中使用任何TestViewController代碼,但是在使用剛剛下載的xib創建視圖控制器時這樣做:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"gg.bundle"];
NSBundle *bundle = [NSBundle bundleWithPath:filePath];
if ( !bundle )
{
NSLog(@"Error getting bundle");
}
MyViewController *vc = [MyViewController new];
[vc initWithNibName:@"CustomDownloadedXib" bundle:bundle];
當我將此視圖控制器推送到我的堆棧時,我收到此錯誤:
***由於未捕獲的異常'NSInternalInconsistencyException'而終止應用程序,原因:'無法在bundle中加載NIB:'NSBundle(尚未加載)',名稱為'CustomDownloadedXib''
問題似乎是我的包“尚未加載”。 我嘗試通過調用強制我的包加載:
[bundle load]
但這沒有用。
我的方法在這里不正確嗎? 這似乎是直觀的方式。
提前致謝!
首先,如果沒有正確創建一個包,它將不會被加載。 因此,為了創建一個合適的包,下面是創建一個包的步驟:
通過在OS X - > Framework&Libraries下選擇名為bundle的模板來添加新目標。
選擇新創建的目標並將BaseSDK從OSX更改為最新iOS。
在Build Phrases - > Copy Bundle Resources中添加要從bundle中使用它的.xibs,圖像或其他資源。
在Build Phrases中添加CoreFoundation框架 - >使用Libraries鏈接二進制文件。
編譯選擇iOS設備的目標。
將新創建的捆綁包從Products目錄保存到某個位置。
現在將該包復制到您的主項目中。 使用以下代碼加載包:
NSString *path = [[NSBundle mainBundle] pathForResource:@"BundleName" ofType:@"bundle"];
NSBundle *bundle = [NSBundle bundleWithPath:path];"
您現在使用新捆綁包進行設置。
按照這里的說明工作:
我只是錯誤地創建了包!
您需要在Xcode中創建捆綁包,因為如果不這樣做,它將不會被加載。 要創建“向項目添加新目標”,請選擇“框架和庫” - >“捆綁”,然后鏈接到Core Foundation。 然后將要上載的xib添加到目標網站。 構建目標,在Finder中顯示,壓縮和上傳!
經過一段時間后,我發現這是通過庫加載資源的常見問題。 我錯過了添加“CoreFramework”鏈接到資源包的步驟,也沒有將其復制到客戶端應用程序文件夾。 這些步驟將有助於適當地加載資源包。 #dsiddhapura的提示幫助我找出了這些問題。
資源編程指南摘錄:
在UIKit中,應用程序只能從其主包中加載nib文件。
聽起來你不能做你想做的事。 或者至少,Apple不希望你這樣做。 當然,您可以隨時下載帶有圖像的.bundle
並將其加載為UIImage
或類似物,然后將“活動”皮膚保存到已知目錄中,該目錄是您的應用程序始終查找顯示界面時要使用的圖像的目錄。 更改皮膚等同於將該路徑中的圖像資源替換為下載的包中的圖像資源。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.