【发布时间】:2015-04-21 14:57:14
【问题描述】:
我正在创建一个包含 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 文件,并且我在构建的框架目录中看到它们,但是,我注意到生成的框架的结构不遵循中概述的结构apple's documentation。即使我更改了框架结构(使用版本并将Header 和Resources 文件夹链接到当前版本)我仍然无法解决问题。
我尝试通过以下方式加载我的笔尖:
1通过框架名称加载包,在这种情况下包是nil
NSString *resourceBundlePath = [[NSBundle mainBundle] pathForResource:@"myframework" ofType:@"framework"];
resourcesBundle = [NSBundle bundleWithPath:resourceBundlePath];
self = [super initWithNibName:@"MyNibName" bundle:resourcesBundle];
2 创建资源包并将其添加到框架中。也是nil。请注意,如果我将捆绑包单独添加到项目中,则此解决方案有效,但这违背了框架的目的。
NSString *resourceBundlePath = [[NSBundle mainBundle] pathForResource:@"resources" ofType:@"bundle"];
resourcesBundle = [NSBundle bundleWithPath:resourceBundlePath];
self = [super initWithNibName:@"MyNibName" bundle:resourcesBundle];
3 按类加载捆绑包,仍然无法正常工作,但它返回与[NSBundle mainBundle] 中相同的应用捆绑包。 FrameworkClass 是嵌入在框架中的任何类。
NSBundle* bundle = [NSBundle bundleForClass:[FrameWorkClass class]];
4 使用 [NSBundle mainBundle] 加载主包,这不起作用也不应该起作用。
我认为正在发生的事情是框架的资源没有包含在最终的应用程序中。
我错过了什么?有没有人能够使用 xcode 中的默认静态框架模板来制作带有 nib 文件的框架?
【问题讨论】:
-
你能显示你用来加载笔尖的代码吗?
-
您可以使用:
NSBundle* bundle = [NSBundle bundleForClass:[YourFrameWorkClass class]]; -
现在捆绑打印为零吗?还要检查你的框架并检查包和笔尖是否存在。
-
@MidhunMP 在这种情况下它不是零,它是应用程序包。这是我登录时得到的:
</private/var/mobile/Containers/Bundle/Application/01AD75AF-125D-4B40-9757-B901AB6ECDC0/Sample.app> -
@KushalAshok 很抱歉刚刚注意到这一点的迟到的回复。我当时没有找到解决办法。
标签: ios xcode static-libraries xib ios-frameworks