2012-12-11 57 views
2

我試圖把NIB/XIB文件放入一個叫Configuration.bundle的包中。當我嘗試從我的包中加載xib時,應用程序崩潰,因爲它無法找到xib文件。從我自己的包中加載筆尖?

NSBundle *bundle = [NSBundle bundleWithPath:[[NSBundle mainBundle] 
pathForResource:@"Configuration" ofType:@"bundle"]]; 
[bundle load]; 
NSLog(@"bundle: %@", bundle); 

我得到的輸出

包:一個NSBundle(尚未加載)

的 '尚未加載' 的一部分讓我害怕了一下。爲什麼不加載?

最後當我嘗試加載我的筆尖與視圖控制器

ConfigViewController *configViewController = [[ConfigViewController alloc] initWithNibName:@"ConfigViewController" bundle:bundle]; 

我得到的輸出

*終止應用程序由於未捕獲的異常「NSInternalInconsistencyException」,原因:'無法在包中加載NIB:名爲'ConfigViewController.xib'的'NSBundle(尚未加載)'

我已經嘗試使用和不使用.xib。

任何想法?

回答

1

加載方法用於加載可執行代碼,如框架和這些東西。
您的軟件包不包含任何要加載的可執行文件,因此您不需要致電[軟件包加載]
如果束紅外正確的名稱,那麼所有你寫的,除了[束負載]是fine.Anyways檢查路徑是正確的,不要嵌套太多的說明:

NSString* path=[ [NSBundle mainBundle] pathForResource: @"Configuration" ofType: @"bundle"]; 

如果此字符串是正確的路徑,那麼您確定無需調用[bundle load]即可正確加載該軟件包。

+0

感謝您的評論,但不是解決我的問題。它仍然不會加載筆尖:( – Erik

+0

在這一點上,捆綁軟件名稱是錯誤的,或者它不是真的在主包內。是否複製了它? –

+0

如果我拼錯捆綁名稱,當我加載它時NSBundle將是零,所以它肯定會加載一些東西 – Erik

0

首先,如果一個bundle沒有正確創建,它將不會被加載。因此,爲了創建一個合適的包,下面是創建一個包的步驟:
1.通過在OS X下選擇一個名爲bundle的模板來添加一個新目標 - > Framework &庫。

  1. 選擇新創建的目標並將BaseSDK從OSX更改爲Latest iOS。

  2. 添加要在構建短語使用它從包.xibs,圖像或其他資源 - >複製包資源。

  3. 添加的CoreFoundation框架構建短語 - >鏈接二進制與圖書館。

  4. 編譯選擇iOS設備的目標。

  5. 將新創建的產品包從產品目錄保存到某個地方。

現在將該包複製到您的主項目中。使用以下代碼加載包:

NSString *path = [[NSBundle mainBundle] pathForResource:@"BundleName" ofType:@"bundle"]; 

NSBundle *bundle = [NSBundle bundleWithPath:path];" 

您現在已設置爲新包。