iphone - 为什么我不能在我的 iPhone 静态库中的包中加载 nib?

标签 iphone objective-c uiviewcontroller ios xib

首先让我说我是一个非常原始的 iPhone 开发者。

我正在制作一个可用于 iPhone 应用程序的静态库。它需要显示一个 View ,但据我所知,静态库不能包含 nib(或 xib,在我的例子中)。所以,我创建了一个单独的包,其中包含我需要的 xib。然后,我将 bundle 与应用程序中的静态库一起包含在内。我想使用有问题的 xib 初始化一个扩展 UIViewController 的类。

我的库中有以下代码:

NSString *bundlePath = [[NSBundle mainBundle] pathForResource:@"Mobtest" ofType:@"bundle"];
NSBundle *mobtestBundle = [NSBundle bundleWithPath:bundlePath];
NSLog([@"bundle path: " stringByAppendingString: [[NSBundle bundleWithPath:bundlePath] bundlePath]]);
sharedInstance = [[MTFeedbackViewController alloc] initWithNibName:@"MTFeedbackViewController" bundle:mobtestBundle];

NSLog 输出的包路径是已编译应用程序中包的正确路径。不幸的是,我无法初始化 UIViewController 而是出现以下错误:

2010-08-20 22:08:16.102 MobtestLibSampleApp[2332:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIViewController _loadViewFromNibNamed:bundle:] was unable to load a nib named "MTFeedbackViewController"'

有没有人对为什么无法加载 xib 有任何建议?也许其中的某些内容链接不正确?有什么地方可以获得额外的调试信息吗?

最佳答案

您是否考虑过放弃 nib 并通过在 View Controller 中实现 -loadView 来在代码中构建 View ?如果您没有很多 View ,和/或它们并不复杂,那么这对于您的库的用户来说会更容易,因为他们不必担心将一个包与您的库一起包含。

出于调试目的,您可以在 View Controller 中覆盖 -loadView 并检查 self.nibName 和 self.nibBundle 以确保您的 Controller 正在获取您传入的资源。请记住调用 [super loadView]这样你的 Nib 就真的被加载了。 (请注意,如果您重写 loadView 来构建 View ,并设置 Controller 的 View 属性,则您不应调用 [super loadView]。)

文档说你的 bundle 中的 nib 应该位于“lang specific project dir”或“Resources”子目录中。在 Xcode 中仔细检查您的 bundle 目标,以确保您的 nib 被复制到您的 bundle 中的正确位置('Projects' 或 'Resources' 子目录)。另外,尝试在 loadView 方法中检查包的内容:

NSLog(@"nib path inside bundle: %@", [self.nibBundle pathForResource:@"MTFeedbackViewController" ofType:@"nib"]);

关于iphone - 为什么我不能在我的 iPhone 静态库中的包中加载 nib?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3536427/

相关文章:

ios - 表格 View 中的表格 View swift

iphone - Lion上Xcode 4.1的奇怪编译错误

iOS 向 UITableView 添加图像导致显示时间过长

objective-c - 使用pushViewController时没有Xib的UIViewController显示空白

ios - 什么是下拉时在 UITableViewWrapperView 之前出现的 UIView?

iphone - 使用单个 NSMutableArray 填充 UITableView 部分表

ios - iOS 上的 Cocoa 图形/绘图框架

ios - 核心数据 : error: (14) I/O error for database

objective-c - Mac OS X : Best way to implement a card game GUI

objective-c - 在 iOS 中创建包含行和列的表格