Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/118.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 从捆绑包加载NIB时出现异常_Ios_Xcode4.2_Bundle_Nib_Ios5 - Fatal编程技术网

Ios 从捆绑包加载NIB时出现异常

Ios 从捆绑包加载NIB时出现异常,ios,xcode4.2,bundle,nib,ios5,Ios,Xcode4.2,Bundle,Nib,Ios5,当我试图从一个包中显示一个视图时,我立即崩溃。以下是设置: 项目在应用程序的主捆绑包中包含一个捆绑包CFramework.bundle CFramework.bundle在其根目录中包含GigyaFBPreviewController.xib及其使用的图像 GigyaFBPreviewController.m位于项目引用的静态库中 代码: 该代码在单击按钮后执行,并在最后一行崩溃。GigyaFBPreviewController只是一个UIViewController,它使用默认的initW

当我试图从一个包中显示一个视图时,我立即崩溃。以下是设置:

  • 项目在应用程序的主捆绑包中包含一个捆绑包CFramework.bundle
  • CFramework.bundle在其根目录中包含GigyaFBPreviewController.xib及其使用的图像
  • GigyaFBPreviewController.m位于项目引用的静态库中
代码:

该代码在单击按钮后执行,并在最后一行崩溃。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
***由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:
无法加载捆绑包中名为“GigyaFBPreviewController”的NIB:“NSBundle(尚未加载)”
***第一次抛出时调用堆栈:
(
0 CoreFoundation 0x01ad85a9例外预处理+185
1 libobjc.A.dylib 0x01c2c313 objc_异常_抛出+44
2 CoreFoundation 0x01a90ef8+[N异常提升:格式:参数:][136
3 CoreFoundation 0x01a90e6a+[N异常提升:格式:][58
4 UIKit 0x00e050fa-[UINib实例化所有者:选项:][2024
5 UIKit 0x00e06ab7-[NSBundle(UINSBUNDLEADTIONS)LOADNIBNAME:所有者:选项:][168
6 UIKit 0x00cbc628-[UIViewController\u loadViewFromNibNamed:bundle:][70
7 UIKit 0x00cba134-[UIViewController loadView]+120
8 UIKit 0x00cba00e-[UIViewController视图]+56
9 UIKit 0x00cbba3d-[UIViewController视图控制器旋转]+63
10 UIKit 0x00cb7988-[UIViewController\u visibleView]+90
11 UIKit 0x00f5993c-[UIClientRotationContext initWithClient:TooOrientation:duration:andWindow:+354
12 UIKit 0x00c3181e-[UIWindow\u setRotatableClient:TooOrientation:updateStatusBar:duration:force:+954
13 UIKit 0x00eb9619-[UIWindowController转换:从ViewController:到ViewController:目标:DiEndSelector:+1381
14 UIKit 0x00cbe65d-[UIViewController presentModalViewController:带转换:][3478
15 socialmediatest 0x000027bb-[socialmediatest视图控制器点击:][283
等
相关信息:

  • 如果我从CFramework.bundle中取出nib文件并将其放入项目中,它可以正常工作。但是,我需要将其放入一个bundle中,以便与静态库一起分发
  • 捆绑包存在于.app中,调用类型为@“xib”的[bundle pathForResource:@“GigyaFBPreviewController]”返回正确的路径
  • 如果我从nib中删除图像引用,则不会发生任何更改。所有图像都被引用为CFramework\image.png
  • “尚未加载”的错误消息真的很奇怪。我发现很多帖子都有人在切换到Xcode4时遇到了相同的异常,但他们的解决方案对我不起作用
*解决方案*


xib未编译成nib,无法加载,duh。感谢Joshua Weinberg在评论中提供以下链接!

首先,如果未正确创建捆绑包,将无法加载。因此,为了创建正确的捆绑包,以下是创建捆绑包的步骤:

  • 通过在OS X->Framework&Libraries下选择名为bundle的模板添加新目标

  • 选择新创建的目标并将BaseSDK从OSX更改为最新的iOS

  • 从bundle in Build Phrases->Copy bundle resources添加要使用的.xib、图像或其他资源

  • 在构建短语->将二进制文件链接到库中添加CoreFoundation框架

  • 选择iOS设备编译目标

  • 将新创建的捆绑包从Products目录保存到某个位置

  • 现在将该捆绑包复制到主项目中。使用以下代码加载捆绑包:

    NSString *path = [[NSBundle mainBundle] pathForResource:@"BundleName" ofType:@"bundle"];
    
    NSBundle *bundle = [NSBundle bundleWithPath:path];
    

    您现在已设置了新的捆绑包。

    如果您没有正确设置目标依赖项,并且Xcode并行化您的构建,也可能会出现此错误,即它将同时构建多个目标

    我在Project-A生成sub-Project-B并包含Project-B-Resources捆绑包时出错。Project-B生成sub-Project-C,后者生成了自己的Project-C-Resources。Project-C资源捆绑在Project-B资源中。在Xcode>Build Phases>Target Dependencies中-如果我将Project-B-Resources置于Project-B之上,则捆绑包将为p打包不正确。我需要确保先列出Project-B,以确保它正确触发Project-C-Resources生成

    …有点口齿不清,想了解一下上面的内容,但如果在嵌套项目中缺少nib,则需要探索一下


    可能重复的
    (尚未加载)
    不一定是一条错误消息。它只是意味着您尚未将
    load
    消息发送到该捆绑包。异常描述是什么?当它在设备上运行时,您如何编译它?有关解决方案,请参阅第一条注释。
    NSString *path = [[NSBundle mainBundle] pathForResource:@"BundleName" ofType:@"bundle"];
    
    NSBundle *bundle = [NSBundle bundleWithPath:path];