2016-07-19 205 views
8

我已經從cocoapods安裝PSCarouselView到我的項目。當我嘗試使用這個庫時,我得到運行時錯誤。並且錯誤表示無法加載榫文件...無法加載NIB包CocoaPods

我檢查了圖書館,看到正確註冊該筆尖文件。同時我也檢查了目標會員資格,並且複選框被選中。然後我檢查podspec文件並找不到有關該lib的任何podspec,然後爲該lib創建了一個pod spec文件。使用下面的命令

pod spec create [PSCarouselView]https://github.com/DeveloperPans/PSCarouselView 

然後我可以檢查podspec文件並添加以下命令;

s.resources = "Resources/*.xib" 

    s.resource_bundles = { 
    'PSCarouselView' => [ 
    'Pod/**/*.xib' 

其實xib文件複製到我的項目之前,我將此命令添加到podspec。我只是想拼命......用下面的代碼顯示註冊

enter image description here

而廈門國際銀行文件;

[self registerNib:[UINib nibWithNibName:@"PSCarouselCollectionCell" bundle:nil] forCellWithReuseIdentifier:@"PSCarouselCollectionCell"]; 

標識符也定義得當;

enter image description here

所以我現在很絕望的有關如何解決這個問題。

我在下面分享了錯誤;

MyTestApp[18232:1316081] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Could not load NIB in bundle: 'NSBundle </Users/adminuser/Library/Developer/CoreSimulator/Devices/464AB3F8-3C31-4473-AD1B-F554F3F59CDB/data/Containers/Bundle/Application/B4A5F964-A6E0-4357-878F-11A299FD1ACA/MyTestApp.app> (loaded)' with name 'PSCarouselCollectionCell'' 
*** First throw call stack: 
(
    0 CoreFoundation      0x0000000101598d85 __exceptionPreprocess + 165 
    1 libobjc.A.dylib      0x000000010100cdeb objc_exception_throw + 48 
    2 CoreFoundation      0x0000000101598cbd +[NSException raise:format:] + 205 
    3 UIKit        0x00000001023dec89 -[UINib instantiateWithOwner:options:] + 499 
    4 UIKit        0x000000010289f553 -[UICollectionView _dequeueReusableViewOfKind:withIdentifier:forIndexPath:viewCategory:] + 716 
    5 UIKit        0x000000010289febc -[UICollectionView dequeueReusableCellWithReuseIdentifier:forIndexPath:] + 169 
    6 PSCarouselView      0x0000000100b13b92 -[PSCarouselView collectionView:cellForItemAtIndexPath:] + 114 
    7 UIKit        0x000000010288e08f -[UICollectionView _createPreparedCellForItemAtIndexPath:withLayoutAttributes:applyAttributes:isFocused:] + 483 
    8 UIKit        0x0000000102891d96 -[UICollectionView _updateVisibleCellsNow:] + 4988 
    9 UIKit        0x0000000102896575 -[UICollectionView layoutSubviews] + 258 
    10 PSCarouselView      0x0000000100b13108 -[PSCarouselView layoutSubviews] + 328 
    11 UIKit        0x00000001020d1980 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 703 
    12 QuartzCore       0x0000000105065c00 -[CALayer layoutSublayers] + 146 
    13 QuartzCore       0x000000010505a08e _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 366 
    14 UIKit        0x00000001020c1205 -[UIView(Hierarchy) layoutBelowIfNeeded] + 1129 
    15 UIKit        0x00000001021f65c5 -[UINavigationController _layoutViewController:] + 1613 
    16 UIKit        0x00000001021f53b4 -[UINavigationController _layoutTopViewController] + 268 
    17 UIKit        0x00000001021f26bd -[UINavigationController navigationTransitionView:didEndTransition:fromView:toView:] + 856 
    18 UIKit        0x000000010249cc2c -[UINavigationTransitionView _notifyDelegateTransitionDidStopWithContext:] + 422 
    19 UIKit        0x000000010249cfa2 -[UINavigationTransitionView _cleanupTransition] + 788 
    20 UIKit        0x00000001020a47ff -[UIViewAnimationState sendDelegateAnimationDidStop:finished:] + 241 
    21 UIKit        0x00000001020a1706 +[UIViewAnimationState popAnimationState] + 314 
    22 UIKit        0x000000010249c8dd -[UINavigationTransitionView transition:fromView:toView:] + 2640 
    23 UIKit        0x00000001021f7651 -[UINavigationController _startTransition:fromViewController:toViewController:] + 3291 
    24 UIKit        0x00000001021f7c4d -[UINavigationController _startDeferredTransitionIfNeeded:] + 890 
    25 UIKit        0x00000001021f8d0b -[UINavigationController __viewWillLayoutSubviews] + 57 
    26 UIKit        0x00000001023a7503 -[UILayoutContainerView layoutSubviews] + 248 
    27 UIKit        0x00000001020d1980 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 703 
    28 QuartzCore       0x0000000105065c00 -[CALayer layoutSublayers] + 146 
    29 QuartzCore       0x000000010505a08e _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 366 
    30 QuartzCore       0x0000000105059f0c _ZN2CA5Layer28layout_and_display_if_neededEPNS_11TransactionE + 24 
    31 QuartzCore       0x000000010504e3c9 _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 277 
    32 QuartzCore       0x000000010507c086 _ZN2CA11Transaction6commitEv + 486 
    33 QuartzCore       0x000000010507c7f8 _ZN2CA11Transaction17observer_callbackEP19__CFRunLoopObservermPv + 92 
    34 CoreFoundation      0x00000001014bdc37 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 23 
    35 CoreFoundation      0x00000001014bdba7 __CFRunLoopDoObservers + 391 
    36 CoreFoundation      0x00000001014b311c CFRunLoopRunSpecific + 524 
    37 UIKit        0x0000000102011f21 -[UIApplication _run] + 402 
    38 UIKit        0x0000000102016f09 UIApplicationMain + 171 
    39 MyTestApp       0x0000000100a598b2 main + 114 
    40 libdyld.dylib      0x0000000107d9a92d start + 1 
) 
libc++abi.dylib: terminating with uncaught exception of type NSException 
(lldb) 
+0

如果你使用pod作爲框架,你可能需要參考bundle的框架。 NSString * resourceBundlePath = [[NSBundle mainBundle] pathForResource:@「Frameworks/PSCarouselView。框架/ PSCarouselView「ofType:@」bundle「]; NSBundle * bundle = [NSBundle bundleWithPath:resourceBundlePath]; –

回答

5

您將需要包含該窗格的包。

例如在我的代碼(的集合視圖基於貨幣符號選擇器):

public class BGSCurrencyPickerVC: UIViewController,UICollectionViewDelegate { 

public override func viewDidLoad() { 
    super.viewDidLoad() 

    // Register cell classes 

    let podBundle = NSBundle(path: NSBundle(forClass: BGSCurrencyPickerVC.self).pathForResource("BLAMCurrencyPicker", ofType: "bundle")!) 

    self.collectionView!.registerNib(UINib(nibName: "BGSCurrencyPickerCVCell", bundle: podBundle), forCellWithReuseIdentifier: "BGSCurrencyPickerCVCell") 

舉一個例子來看看Collection View based swift cocoapod

此外例如,Currency Picker cocoapod

的SWIFT 3:

let podBundle = Bundle(path: Bundle(for: BLAMPaymentCVView.self).path(forResource: "BLAMPayment", ofType: "bundle")!) 
+0

你輸入資源參數的路徑是什麼?我不太明白那一點。 – Pavan

+0

@Pavan路徑對於資源參數是pod的名字,在我的Swift 3的例子中是「BLAMPayment」,我將添加另一個示例鏈接來演示這個。 – greentor

7

如果捆綁機智h .xib(本例中爲YourView.xib)位於pods包中,您可以通過這種方式檢索文件擁有者UIView子類中的包。

let bundle = Bundle(for: self.classForCoder) 

然後實例視圖:

nib.instantiate(withOwner: self, options: nil) 
let nib = UINib(nibName: "YourView", bundle: bundle) 

在要繼承UIView的加載POD模塊之外的這樣的情況下,更好地利用下面是什麼,因爲「self.classForCoder」會給你捆綁你的子類是在。

let bundle = Bundle(for: <FileOwnerUIViewSubclass>.classForCoder()) 
+1

你能簡單地解釋一下這段代碼的作用,爲什麼它解決了這個問題,應該用嗎? – JJJ

+0

@JJJ更新了答案。 –

相關問題