2016-07-19 23 views
8

Ich habe PSCarouselView von cocoapods in mein Projekt installiert. Und wenn ich versuche, diese lib zu verwenden, bekomme ich Laufzeitfehler. Und der Fehler sagt, konnte Nib-Datei nicht laden ...NIB konnte nicht im Paket CocoaPods geladen werden

Ich habe die Bibliothek überprüft und sah, dass Nib-Datei richtig registriert. Außerdem habe ich die Zielmitgliedschaft überprüft und das Kontrollkästchen ist aktiviert. Dann überprüfe ich die podspec Datei und konnte keine podspec über die lib finden und habe dann eine pod spec Datei für die lib erstellt. Mit dem Befehl unter

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

Dann kann ich die podspec Datei überprüfen und die folgenden Befehle hinzufügen;

Eigentlich Xib-Datei in mein Projekt kopiert, bevor ich diese Befehle zu podspec hinzufügen. Ich habe gerade versucht verzweifelt ...

enter image description here

Und xib Datei registriert mit dem Code unten zeigt;

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

Und Identifier auch richtig definiert;

enter image description here

So, jetzt bin ich ganz verzweifelt darüber, wie dieses Problem zu lösen.

Ich teile den Fehler unten;

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

Wenn Sie Pod als Framework verwenden, müssen Sie möglicherweise auf Bundle of Framework beziehen. NSString * ResourceBundlePath = [[NSBundle MainBundle] PfadForResource: @ "Frameworks/PSCarouselView.Framework/PSCarouselView "OfType: @" Bundle "]; NSBundle * Bundle = [NSBundle BundleWithPath: ResourceBundlePath]; –

Antwort

5

Sie müssen das Bündel des Pods einschließen.

Zum Beispiel in meinem Code (eine Sammlung Ansicht basierte Währungssymbol Kommissionierer):

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") 

Ein Beispiel einen Blick auf Collection View based swift cocoapod

weiteres Beispiel Currency Picker cocoapod

Für Swift 3:

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

Was geben Sie in den Pfad für Ressourcenparameter? Ich verstehe nicht ganz dieses Bit. – Pavan

+0

@Pavan den Pfad Für den Ressourcenparameter ist der Name des Pods. In meinem Beispiel für Swift 3, das "BLAMPayment" ist. Ich füge ein weiteres Beispiel Link, der das demonstriert. – greentor

7

Wenn Bündel wit Wenn Ihre .xib (in diesem Beispiel YourView.xib) in einem Pod-Bundle enthalten ist, können Sie das Bundle in der UIView-Unterklasse des Dateibesitzers auf diese Weise abrufen.

let bundle = Bundle(for: self.classForCoder) 

und zeigen Sie dann instanziiert:

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

Falls Sie wollen auf diese Weise zu Unterklasse UIView außerhalb des Pod-Modul geladen, eine bessere Nutzung, was unten ist, weil ‚self.classForCoder‘ geben Ihnen bündeln dass Ihre Unterklasse ist.

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

Können Sie kurz erklären, was dieser Code tut, warum es das Problem löst und wo es sollte verwendet werden? – JJJ

+0

@JJJ aktualisiert die Antwort. –