3

我有一个静态库,用 开发Xcode 4,这个库包含一个自己的UIViewController.
现在我正在尝试从我的 MonoTouch 项目中使用这个视图及其控制器。
但是在视图试图加载 NIB 文件的那一刻,我得到了以下异常:

"NSInternalInconsistencyException Reason: Could not load NIB in bundle".

有没有办法在MonoTouch项目中使用现有UIViewController的 Objective-C 静态库?

4

1 回答 1

4

这并不是 MonoTouch 特有的问题,这是因为主包中不存在 nib 文件。NIB 文件(以及与此相关的图像)未打包在库中,而是打包在资源包中。如果您在 .app 上“显示包内容”,您将在根目录或 en.lproj 中看到主应用程序中的所有文件。您将看不到库的 nib 文件,因为您的应用程序不知道要构建它。

最快的解决方法是将 .xib 文件移动到 MonoTouch 主项目,它应该可以立即工作,尽管这并不令人满意。另一种方法,我只在 XCode 中做过,是在你的库项目中添加一个捆绑目标来保存你的资源。

创建捆绑包的步骤:

  1. 在您的库项目中,使用OS X -> Framework & Library -> Bundle添加一个新目标。不要担心“OS X”部分。将其命名为“MyLibrary”。
  2. 您应该会看到“MyLibraryResources.bundle”出现在构建产品中。
  3. 在这个新目标中,将 .xib 文件添加到“复制捆绑资源”构建阶段。
  4. 将“MyLibraryResources.bundle”构建产品添加到应用程序的“复制捆绑资源”构建阶段。

现在,如果你构建你的应用程序,它仍然会崩溃,但是如果你查看你的 .app 文件,你会看到包含你的 NIB 文件的目录“MyLibraryResources.bundle”。下一步是让您的视图控制器引用该 NIB。

找到你打电话的地方initWithNib:bundle:。是时候设置捆绑包了!以下步骤创建一个包:

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

如果你通过initWithNib:@"MyViewController" bundle:myLibraryBundle它应该工作。您可能希望以myLibraryBundle每次应用程序执行只调用一次的方式打包。

于 2013-04-19T17:13:07.800 回答