2016-07-19 2 views
8

私はPSCarouselViewをcocoapodsからプロジェクトにインストールしました。そして、私はこのlibを使用しようとすると、ランタイムエラーが発生しています。そして、エラーは、nibファイルをロードできないと言います...NIBをバンドルのCocoaPodsにロードできません

私はライブラリをチェックし、nibファイルが正しく登録されていることを確認しました。また、ターゲットメンバーシップをチェックし、チェックボックスにチェックが入っています。次に、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' 

実際には、このコマンドをpodspecに追加する前にxibファイルをプロジェクトにコピーしました。私は、以下を示すコードで登録必死...

enter image description here

そしてXIBファイルを試してみました。

[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

フレームワークとしてポッドを使用している場合は、フレームワークのバンドルを参照する必要があります。 NSString * resourceBundlePath = [[NSBundle mainBundle] pathForResource:@ "Frameworks/PSCarouselView。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") 

たとえばは、スウィフト3についてはCurrency Picker cocoapod

Collection View based swift cocoapod

さらに例を見てみましょう:

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

リソースパラメータのパスには何を入力しますか?そのビットは分かりません。 – Pavan

+0

@Pavan the pathリソースパラメータは、ポッド名です。Swift 3の例では「BLAMPayment」です。これを示す別の例のリンクを追加します。 – greentor

7

バンドルウィットh .xib(この例ではYourView.xib)がポッドバンドルにある場合、この方法でファイルオーナーのUIViewサブクラスでバンドルを取得できます。その後、

let bundle = Bundle(for: self.classForCoder) 

とビューをインスタンス化:「self.classForCoderは」あなたがバンドル与えるため

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

あなたはUIViewのをサブクラス化したい場合は、以下であるものを、ポッドモジュールの外部より有効に利用するこの方法でロードされました

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

このコードが何をしているのか、なぜそれが問題を解決するのか、を使用する必要がありますか? – JJJ

+0

@JJJは答えを更新しました。 –

関連する問題