2016-07-19 147 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更新了答案。 –

相关问题