加载包含在框架中的nib文件

10

可能重复:
在 iPhone 上,您可以引用静态库中的 Xib 文件吗?

我创建了一个 iOS 框架,并包含一个 xib 视图。当我调试程序时,这行代码能正常工作:

MyViewController *controller = [[MyViewController alloc] initWithNibName:@"MyView" bundle:[NSBundle mainBundle]];

然而,当我从另一个项目中“引用”该框架时- nib不再位于“mainBundle”中。对于上面的代码(它是框架的一部分),我应该怎么做才能从框架加载而不是消费应用程序项目加载?


@ConfusedNoob - 这是一个 iOS 的静态库还是通用框架 - FluffulousChimp
根据这篇文章(http://spin.atomicobject.com/2011/12/13/building-a-universal-framework-for-ios/),它是一个通用框架,但它的起点是一个静态库。 - ConfusedNoob
1个回答

19

这个框架应该在其Info.plist文件中有一个捆绑标识符。在使用此自定义框架的应用程序中,您应该能够通过以下方式访问此捆绑中的资源:

NSString *frameworkBundleID = @"com.yourCompany.YourFrameworkBundleID";
NSBundle *frameworkBundle = [NSBundle bundleWithIdentifier:frameworkBundleID];

这是一个可以访问框架资源的NSBundle

编辑:

似乎有一种替代(可能更好的)方式来访问相关的捆绑包。

例如:

NSBundle *bundle = [NSBundle bundleWithURL:[[NSBundle mainBundle] URLForResource:@"MyLibraryResources" withExtension:@"bundle"]];

请参考这篇优秀的教程


我试试看。由于代码是在框架内部,除了将名称编码到框架中,还有没有更加“自省”的方法来完成这个任务呢?例如:[NSBundle currentBundle]; // 假想代码 - ConfusedNoob
1
踩票 - 真的吗?OP说了“iOS框架”,我们可以合理地假设像这个一样,其中资源可以被打包。 - FluffulousChimp
我如何在框架中找到我的bundle名称?它不在项目的“Info”选项卡上,因为它最初是一个cocoa静态库? - ConfusedNoob
教程链接仍需要将“Entire”框架项目导入客户端应用程序中。有什么用?它根本不会隐藏实现...无用的链接。 - Nirav Bhatt
我不知道编辑后的第二部分是什么意思,但第一部分非常有帮助。谢谢! - Dan Rosenstark
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接