2

我正在尝试将 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”而终止应用程序,原因:“无法在包中加载 NIB:“NSBundle(尚未加载)”,名称为“ConfigViewController.xib”

我已经尝试过使用和不使用 .xib。

有任何想法吗?

4

2 回答 2

1

load 方法用于加载可执行代码,例如框架之类的东西。
您的捆绑包不包含您要加载的任何可执行文件,因此您无需调用[bundle load]如果包的名称正确,那么除了[bundle load]
之外,您编写的所有内容都可以。无论如何检查路径是否正确,不要嵌套太多说明:

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

如果此字符串是正确的路径,那么您可以确定捆绑包将被正确加载,而无需调用[bundle load]

于 2012-12-11T17:44:23.757 回答
0

首先,如果未正确创建捆绑包,它将不会被加载。因此,为了创建正确的包,以下是创建包的步骤:
1. 通过在 OS X -> Framework & Libraries 下选择名为 bundle 的模板来添加新目标。

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

  2. 从 Build Phrases -> Copy Bundle Resources 中的 bundle 添加 .xibs、图像或其他要使用的资源。

  3. 在 Build Phrases -> Link binary with Libraries 中添加 CoreFoundation 框架。

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

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

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

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

NSBundle *bundle = [NSBundle bundleWithPath:path];"

您现在已设置好新捆绑包。

于 2015-03-28T12:58:28.593 回答