我有一个使用Xcode 4
开发的静态库,此库包含一个自己的UIViewController
。
现在我正在尝试使用MonoTouch项目中的View及其控制器
但是在视图尝试加载NIB文件时,我得到以下异常:
"NSInternalInconsistencyException Reason: Could not load NIB in bundle".
有没有办法在 MonoTouch 项目中使用Objective-C静态库中的现有UIViewController
?
答案 0 :(得分:4)
这实际上不是特定于MonoTouch的问题,这是因为主包中不存在nib文件。 NIB文件(以及相关的图像)未打包在库中,而是打包在资源包中。如果您在.app上“显示包内容”,您将在根目录或en.lproj中看到主应用程序中的所有文件。你不会看到你的库的nib文件,因为你的应用程序不知道构建它。
最快的解决方法是将.xib文件移动到MonoTouch主项目中,它应该可以立即工作,尽管这并不令人满意。另一种方法,我只在XCode中完成此操作,就是将一个包目标添加到您的库项目中以保存您的资源。
创建捆绑包的步骤:
现在,如果您构建应用程序,它仍然会崩溃,但如果您查看.app文件,您将看到带有NIB文件的目录“MyLibraryResources.bundle”。下一步是让您的视图控制器引用NIB。
找到您正在呼叫initWithNib:bundle:
的位置。是时候设置捆绑了!以下步骤创建一个包:
NSBundle *myLibraryBundle = [NSBundle bundleWithURL:[[NSBundle mainBundle]
URLForResource:@"MyLibraryResources" withExtension:@"bundle"]];
如果你通过initWithNib:@"MyViewController" bundle:myLibraryBundle
它应该有效。您可能希望以每次应用执行只调用一次的方式打包myLibraryBundle
。