我在iPad上模拟“仅限iPhone”的应用程序。二进制模拟在iPhone模拟器中很好,但是当试图在iPad中模拟时,会出现初始背景图像,但随后屏幕变黑。 (Xcode v4.1,SDK 4.1)
该应用只有一个视图,由一个自定义UIViewController控制。 (SoloViewController)SoloViewController管理的唯一视图包含在一个名为“mainview.xib”的“分离”笔尖中。
我在我的AppDelegate中初始化SoloViewController,如下所示:
- (void)applicationDidFinishLaunching:(UIApplication *)application {
SoloViewController *vc = [[SoloViewController alloc] initWithNibName:@"mainview" bundle:[NSBundle mainBundle]];
self.soloViewController=vc;
[vc release];
[window addSubview:[soloViewController view]];
[window makeKeyAndVisible];
}
我的Info.plist文件将“主nib文件基本名称”设置为“MainWindow”,我相信这是Xcode首次创建基于ViewController的项目时的默认设置。无论如何,我只是原样离开了。但是,当试图在iPad中进行模拟时,日志会显示:
Failed to load NSMainNibFile MainWindow.
iPhone模拟器和硬件对此没有任何问题......
如果我将“主nib文件基本名称”键设置为“mainview”以使用xib文件作为视图,我会收到此错误:
Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<UIApplication 0x7a01270> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key view.'
我已经仔细检查了IB中的xib,并且所有插座都已正确定义并连接到SoloViewController.h&amp; SoloViewController.m。我在这做错了什么!?
另外 - 如果我将NSMainNibFile留空,那么iPhone模拟器就会出现黑屏。 (日志中没有错误)
答案 0 :(得分:2)
事实证明,该项目需要一个MainWindow.xib文件。在我的情况下,我无意中从原始项目模板中删除了该文件并认为它没问题,因为它模拟并在硬件中运行良好。 (iPhone)MainWindow.xib文件需要“UIApplication”类型的文件所有者,“UIResponder”类型的First Responder,指向应用程序委托的自定义类型的App Delegate。 (名称将根据您为项目命名的内容而有所不同)最后有一个UIWindow类型的窗口。所有这些都是默认设置,App Delegate除外。
一旦我加入了以这种方式配置的xib,应用程序就会按预期加载iPhone和iPad。 iPad模拟器。 (仍然不清楚iPad模拟器为什么不同地处理MainWindow.xib文件的缺失)
答案 1 :(得分:0)
当您在iOS 4x或更高版本中定义的代码中引用常量(或通过IB代码生成)时会发生类似的行为,而iPad运行3.2x,并且对这些键定义一无所知。
确保您的目标的iOS部署目标设置为iOS 3.2,Base SDK设置为4.1。如果更改了这些值,请在重新编译之前进行清理。不幸的是,在这种情况下,我认为你不会看到编译器警告。
希望有所帮助。