我正在创建一个包含xib文件的静态iOS框架(
Xcode 6中的默认模板).
但是,当我的框架添加到另一个应用程序时,我无法加载nib文件,我收到以下错误:
Terminating app due to uncaught exception 'NSInternalInconsistencyException',reason: 'Could not load NIB in bundle: 'NSBundle </private/var/mobile/Containers/Bundle/Application/89B7C8F1-698A-4E0B-AD8F-4DB414A6001B/Sample.app> (loaded)' with name 'MyNibName''
我已经尝试了几个解决方案,一些概述了here.我仍然无法解决这个问题.
我看到很多对this popular project的引用,现在不支持,因为xcode具有内置的功能.我应该用这个吗?
在我的框架目标中,我将xib文件包含在“复制Bundle资源”构建阶段,并且我在构建的框架目录中看到它们,但是我注意到生成的框架的结构不符合apple’s documentation中概述的结构.甚至当我更改框架结构(使用版本并将Header和Resources文件夹链接到当前版本)时,我仍然无法解决问题.
我尝试以下列方式加载笔尖:
1通过框架名称加载bundle,在这种情况下,bundle为零
NSString *resourceBundlePath = [[NSBundle mainBundle] pathForResource:@"myframework" ofType:@"framework"]; resourcesBundle = [NSBundle bundleWithPath:resourceBundlePath]; self = [super initWithNibName:@"MyNibName" bundle:resourcesBundle];
2创建资源包并将其添加到框架中.也没有请注意,如果我将该包单独添加到项目中,则该解决方案将起作用,但会破坏该框架的目的.
NSString *resourceBundlePath = [[NSBundle mainBundle] pathForResource:@"resources" ofType:@"bundle"]; resourcesBundle = [NSBundle bundleWithPath:resourceBundlePath]; self = [super initWithNibName:@"MyNibName" bundle:resourcesBundle];
3按类加载bundle,仍然没有工作,但是它返回与[NSBundle mainBundle]中相同的应用程序包. FrameworkClass是嵌入在框架中的任何类.
NSBundle* bundle = [NSBundle bundleForClass:[FrameWorkClass class]];
4用[NSBundle mainBundle]装载主包,它不应该和不应该工作.
我认为正在发生的事情是框架的资源没有被包含在最终的应用程序中.
我失踪了什么有没有人能够使用xcode中的默认静态框架模板来制作一个包含nib文件的框架?
解决方法
这应该加载你的包.
NSString* const frameworkBundleID = @"com.framework.bundleId"; NSBundle* bundle = [NSBundle bundleWithIdentifier:frameworkBundleID];