Я получаю сбой, как только я пытаюсь показать вид из комплекта. Вот настройки:
- Проект содержит пакет CFramework.bundle внутри основного пакета приложения
- CFramework.bundle содержит GigyaFBPreviewController.xib и изображения, которые он использует, в своем корне
- GigyaFBPreviewController.m находится в статической библиотеке, на которую ссылается проект
Код:
NSString* bundlePath = [[NSBundle mainBundle] pathForResource:@"CBCFramework" ofType:@"bundle"];
NSBundle* bundle = [NSBundle bundleWithPath:bundlePath];
GigyaFBPreviewController* gigya = [[GigyaFBPreviewController alloc] initWithNibName:@"GigyaFBPreviewController" bundle:bundle];
[self presentModalViewController:gigya animated:YES];
Код выполняется после нажатия кнопки и вылетает на последней строке. GigyaFBPreviewController - это просто UIViewController, и он использует значение по умолчанию initWithNibName: bundle:
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason:
'Could not load NIB in bundle: 'NSBundle </Users/mjovanovic/Library/Application Support/iPhone Simulator/4.3.2/Applications/A40F8D71-EB88-4EB5-B9D3-CFD330C57F24/socialmediatest.app/CBCFramework.bundle> (not yet loaded)' with name 'GigyaFBPreviewController''
*** Call stack at first throw:
(
0 CoreFoundation 0x01ad85a9 __exceptionPreprocess + 185
1 libobjc.A.dylib 0x01c2c313 objc_exception_throw + 44
2 CoreFoundation 0x01a90ef8 +[NSException raise:format:arguments:] + 136
3 CoreFoundation 0x01a90e6a +[NSException raise:format:] + 58
4 UIKit 0x00e050fa -[UINib instantiateWithOwner:options:] + 2024
5 UIKit 0x00e06ab7 -[NSBundle(UINSBundleAdditions) loadNibNamed:owner:options:] + 168
6 UIKit 0x00cbc628 -[UIViewController _loadViewFromNibNamed:bundle:] + 70
7 UIKit 0x00cba134 -[UIViewController loadView] + 120
8 UIKit 0x00cba00e -[UIViewController view] + 56
9 UIKit 0x00cbba3d -[UIViewController viewControllerForRotation] + 63
10 UIKit 0x00cb7988 -[UIViewController _visibleView] + 90
11 UIKit 0x00f5993c -[UIClientRotationContext initWithClient:toOrientation:duration:andWindow:] + 354
12 UIKit 0x00c3181e -[UIWindow _setRotatableClient:toOrientation:updateStatusBar:duration:force:] + 954
13 UIKit 0x00eb9619 -[UIWindowController transition:fromViewController:toViewController:target:didEndSelector:] + 1381
14 UIKit 0x00cbe65d -[UIViewController presentModalViewController:withTransition:] + 3478
15 socialmediatest 0x000027bb -[socialmediatestViewController clicky:] + 283
etc
Соответствующая информация:
- Если я беру nib-файл из CFramework.bundle и помещаю его в проект, он работает нормально. Тем не менее, мне нужно в комплекте для распространения со статической библиотекой.
- Пакет существует внутри .app и вызывает [bundle pathForResource: @ "GigyaFBPreviewController" ofType: @ "xib"] возвращает правильный путь.
- Если я удалю ссылку на изображение из пера, ничего не изменится. Все изображения обозначены как CFramework \ image.png
- Сообщение об ошибке (еще не загружено) действительно странное. Я нашел кучу постов, где люди переходили в одно и то же исключение при переходе на Xcode4, но их решения у меня не сработали.
* РЕШЕНИЕ *
xib не был скомпилирован в nib и не мог быть загружен, да. Спасибо Джошуа Вайнбергу за предоставленную в комментариях ссылку ниже!