从我自己的捆绑中加载笔尖?

时间:2012-12-11 17:38:18

标签: objective-c ios nib nsbundle

我正在尝试将NIB / XIB文件放入捆绑包中,我称之为Configuration.bundle。当我尝试从我的软件包加载xib时,应用程序崩溃,因为它无法找到xib文件。

NSBundle *bundle = [NSBundle bundleWithPath:[[NSBundle mainBundle]
pathForResource:@"Configuration" ofType:@"bundle"]];
[bundle load];
NSLog(@"bundle: %@", bundle);

我得到了输出

  

捆绑:NSBundle(尚未加载)

'尚未加载'部分让我有点害怕。为什么不加载?

最后当我尝试使用视图控制器

加载我的笔尖时
ConfigViewController *configViewController = [[ConfigViewController alloc] initWithNibName:@"ConfigViewController" bundle:bundle];

我得到了输出

  

* 由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'无法在bundle中加载NIB:'NSBundle(尚未加载)',名称为'ConfigViewController.xib'

我曾尝试使用和不使用.xib。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

load方法用于加载框架和这些东西之类的可执行代码 您的捆绑包中不包含您要加载的任何可执行文件,因此您不需要调用 [捆绑加载]
如果捆绑的名称是正确的,那么除了 [捆绑加载] 之外你所写的所有内容都很好。不要检查路径是否正确,不要过多地嵌套指令:

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

如果此字符串是正确的路径,那么您可以确保在不调用 [bundle load] 的情况下正确加载该包。

答案 1 :(得分:0)

首先,如果未正确创建捆绑包,则不会加载。因此,为了创建一个合适的包,下面是创建一个包的步骤:
1.通过在OS X下选择一个名为bundle的模板来添加新目标 - >框架&库。

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

  2. 在Build Phrases中添加要从捆绑中使用它的.xibs,图像或其他资源 - >复制捆绑资源。

  3. 在Build Phrases中添加CoreFoundation框架 - >链接二进制文件与库。

  4. 选择iOS设备编译目标。

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

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

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

    现在您已使用新捆绑包进行设置。

相关问题