2016-07-19 2 views
8

Я установил PSCarouselView из cocoapods в свой проект. И когда я пытаюсь использовать эту библиотеку, я получаю ошибку времени выполнения. И ошибка говорит, что не удалось загрузить файл nib ...Не удалось загрузить NIB в комплекте CocoaPods

Я проверил библиотеку и увидел, что файл nib зарегистрирован правильно. А также я проверил целевое членство, и флажок установлен. Затем я проверяю файл podspec и не могу найти какой-либо podspec о lib, а затем я создал файл спецификации pod для lib. Использование команды ниже

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

И 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.framework/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 путь для параметра ресурса - имя элемента. В моем примере для Swift 3, который является «BLAMPayment». Я добавлю еще одну примерную ссылку, которая демонстрирует это. – greentor

7

If bundle wit 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 загружен этот путь за пределами модуля стручок, лучше использовать то, что ниже, потому что «self.classForCoder» даст вам сверток что ваш подкласс находится.

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

Не могли бы вы вкратце объяснить, что делает этот код, почему он решает проблему и где это следует использовать? – JJJ

+0

@JJJ обновил ответ. –

Смежные вопросы