2012-01-18 62 views
3

我試圖從軟件包中顯示視圖時,發生崩潰。這裏的設置:從軟件包加載NIB時出現異常

  • 項目包含應用程序的主束內束CFramework.bundle
  • CFramework.bundle包含GigyaFBPreviewController.xib和它使用的圖像,在它的根
  • GigyaFBPreviewController.m處於靜止庫由項目

代碼中引用:

NSString* bundlePath = [[NSBundle mainBundle] pathForResource:@"CBCFramework" ofType:@"bundle"]; 
NSBundle* bundle = [NSBundle bundleWithPath:bundlePath]; 
GigyaFBPreviewController* gigya = [[GigyaFBPreviewController alloc] initWithNibName:@"GigyaFBPreviewController" bundle:bundle]; 
[self presentModalViewController:gigya animated:YES]; 

代碼在點擊按鈕後執行,並在最後一行中崩潰。 GigyaFBPreviewController只是一個UIViewController,它使用默認的initWithNibName:捆綁:

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 
'Could not load NIB in bundle: 'NSBundle </Users/mjovanovic/Library/Application Support/iPhone Simulator/4.3.2/Applications/A40F8D71-EB88-4EB5-B9D3-CFD330C57F24/socialmediatest.app/CBCFramework.bundle> (not yet loaded)' with name 'GigyaFBPreviewController'' 
*** Call stack at first throw: 
(
    0 CoreFoundation      0x01ad85a9 __exceptionPreprocess + 185 
    1 libobjc.A.dylib      0x01c2c313 objc_exception_throw + 44 
    2 CoreFoundation      0x01a90ef8 +[NSException raise:format:arguments:] + 136 
    3 CoreFoundation      0x01a90e6a +[NSException raise:format:] + 58 
    4 UIKit        0x00e050fa -[UINib instantiateWithOwner:options:] + 2024 
    5 UIKit        0x00e06ab7 -[NSBundle(UINSBundleAdditions) loadNibNamed:owner:options:] + 168 
    6 UIKit        0x00cbc628 -[UIViewController _loadViewFromNibNamed:bundle:] + 70 
    7 UIKit        0x00cba134 -[UIViewController loadView] + 120 
    8 UIKit        0x00cba00e -[UIViewController view] + 56 
    9 UIKit        0x00cbba3d -[UIViewController viewControllerForRotation] + 63 
    10 UIKit        0x00cb7988 -[UIViewController _visibleView] + 90 
    11 UIKit        0x00f5993c -[UIClientRotationContext initWithClient:toOrientation:duration:andWindow:] + 354 
    12 UIKit        0x00c3181e -[UIWindow _setRotatableClient:toOrientation:updateStatusBar:duration:force:] + 954 
    13 UIKit        0x00eb9619 -[UIWindowController transition:fromViewController:toViewController:target:didEndSelector:] + 1381 
    14 UIKit        0x00cbe65d -[UIViewController presentModalViewController:withTransition:] + 3478 
    15 socialmediatest      0x000027bb -[socialmediatestViewController clicky:] + 283 
    etc 

相關信息:

  • 如果我把筆尖文件出來CFramework.bundle,並把它轉化項目,它工作正常。不過,我需要它在一個包中分發一個靜態庫。
  • 該包存在於.app中,並調用[bundle pathForRes:@「GigyaFBPreviewController」ofType:@「xib」]返回正確的路徑。
  • 如果我從筆尖移除圖像參考,則沒有任何變化。所有圖像被引用爲CFramework \ image.png
  • 「(尚未加載)」錯誤信息真的很奇怪。我發現了一些帖子,當用戶切換到Xcode4時遇到同樣的異常,但他們的解決方案對我來說並不適用。

*解*

的廈門國際銀行並沒有編譯成一個筆尖,它無法加載,咄。謝謝Joshua Weinberg在評論中提供以下鏈接!

+0

的[下載包內包含在iOS上使用XIB/NIB文件(可能重複http://stackoverflow.com/questions/8780293/using-xib-nib-files-contained-within-downloaded-bundles-on-ios) – 2012-01-18 22:00:52

+0

'(尚未加載)'不一定是錯誤消息。這隻意味着你沒有發送'load'消息到這個包。 – ughoavgfhw 2012-01-18 22:01:44

+0

什麼是例外說明? – Costique 2012-01-19 05:15:10

回答

2

首先,如果一個bundle沒有正確創建,它將不會被加載。所以,爲了創造一個合適的包下面是創建包的步驟:

  1. 通過在OS X選擇了一個名爲束templete添加一個新的目標 - >框架&庫。

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

  3. 在Build Phrases - > Copy Bundle Resources中添加要從捆綁軟件中使用它的.xibs,圖像或其他資源。

  4. 在構建詞組中添加CoreFoundation框架 - >與庫鏈接二進制文件。

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

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

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

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

NSBundle *bundle = [NSBundle bundleWithPath:path]; 

您現在已設置爲新包。

0

如果您沒有正確設置目標依賴項,並且Xcode對您的構建進行了並行處理,也就是說它會同時構建多個對象,那麼您也可以得到此錯誤。

我有一個錯誤,其中Project-A構建了子項目B幷包含了Project-B-Resources包。 Project-B構建了子Project-C,構建了它自己的Project-C-Resources。 Project-C資源捆綁在Project-B資源中。在Xcode> Build Phases> Target Dependencies中 - 如果我將Project-B-Resources放在Project-B上面,那麼該軟件包將被錯誤地打包。我需要確保Project-B首先被列出,以確保它正確地觸發了Project-C-Resources構建.....

......有點兒滿口,並且讓你的頭繞過上面,但它是一些探索,如果你有一個丟失了筆尖的問題裏面嵌套項目

https://developer.apple.com/library/ios/recipes/xcode_help-scheme_editor/Articles/SchemeBuild.html

相關問題