从我自己的包中加载笔尖?
Posted
技术标签:
【中文标题】从我自己的包中加载笔尖?【英文标题】:Loading nib from my own bundle? 【发布时间】:2012-12-11 17:38:18 【问题描述】:我正在尝试将 NIB/XIB 文件放在我称为 Configuration.bundle 的包中。当我尝试从我的包中加载 xib 时,应用程序崩溃,因为它找不到 xib 文件。
NSBundle *bundle = [NSBundle bundleWithPath:[[NSBundle mainBundle]
pathForResource:@"Configuration" ofType:@"bundle"]];
[bundle load];
NSLog(@"bundle: %@", bundle);
我得到了输出
bundle: NSBundle(尚未加载)
“尚未加载”部分让我有点害怕。为什么没有加载?
最后,当我尝试使用视图控制器加载我的笔尖时
ConfigViewController *configViewController = [[ConfigViewController alloc] initWithNibName:@"ConfigViewController" bundle:bundle];
我得到了输出
* 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“无法在包中加载 NIB:“NSBundle(尚未加载)”,名称为“ConfigViewController.xib”
我尝试过使用和不使用 .xib。
有什么想法吗?
【问题讨论】:
【参考方案1】:load 方法用于加载可执行代码,例如框架之类的东西。 您的捆绑包不包含您要加载的任何可执行文件,因此您无需调用 [bundle load]。 如果包的名称是正确的,那么除了 [bundle load] 之外,您编写的所有内容都可以。无论如何检查路径是否正确,不要嵌套太多说明:
NSString* path=[ [NSBundle mainBundle] pathForResource: @"Configuration" ofType: @"bundle"];
如果这个字符串是正确的路径,那么你肯定会在不调用 [bundle load] 的情况下正确加载包。
【讨论】:
感谢您的评论,但不能解决我的问题。它仍然不会加载笔尖:( 此时是bundle名称错误,或者它不在主bundle中。你复制了吗? 如果我在加载包时拼错了包名,NSBundle 将为 nil。所以它肯定会加载一些东西 你在项目中正确复制了吗? 是的,我可以在我的项目中看到 Bundle 和其中的 xib 文件【参考方案2】:首先,如果包没有正确创建,它将不会被加载。因此,为了创建正确的捆绑包,以下是创建捆绑包的步骤: 1. 通过在 OS X -> Framework & Libraries 下选择一个名为 bundle 的模板来添加一个新目标。
选择新创建的目标并将 BaseSDK 从 OSX 更改为最新的 ios。
在 Build Phrases -> Copy Bundle Resources 中添加您想要使用的 .xibs、图像或其他资源。
在 Build Phrases 中添加 CoreFoundation 框架 -> 将二进制文件与库链接。
选择iOS设备编译目标。
将新创建的捆绑包从 Products 目录保存到某个位置。
现在将该捆绑包复制到您的主项目中。使用以下代码加载包:
NSString *path = [[NSBundle mainBundle] pathForResource:@"BundleName" ofType:@"bundle"];
NSBundle *bundle = [NSBundle bundleWithPath:path];"
您现在已设置好新的捆绑包。
【讨论】:
以上是关于从我自己的包中加载笔尖?的主要内容,如果未能解决你的问题,请参考以下文章
MonoTouch <--> 静态库异常:无法在包中加载 NIB