【问题标题】:iPhone App view fails to load in iPad but loads in iPhone simulatoriPhone App 视图无法在 iPad 中加载,但在 iPhone 模拟器中加载
【发布时间】:2011-04-16 13:02:12
【问题描述】:

我正在 iPad 中模拟“仅限 iPhone”的应用程序。该二进制文件在 iPhone 模拟器中模拟得很好,但在 iPad 中尝试模拟时,会出现初始背景图像,但随后屏幕变黑。 (Xcode v4.1, SDK 4.1)

应用程序只有一个视图,由单个自定义 UIViewController 控制。 (SoloViewController) SoloViewController 管理的唯一视图包含在名为“mainview.xib”的“分离”nib 中。

我在 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 文件将“Main nib file base name”设置为“MainWindow”,我相信这是您首次创建基于 ViewController 的项目时 Xcode 为您提供的默认值。无论如何,我只是保持原样。但是,当尝试在 iPad 中进行模拟时,日志显示:

Failed to load NSMainNibFile MainWindow.

iPhone模拟器和硬件都没有这个问题...

如果我将“Main nib file base name”键设置为“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 和 SoloViewController.m。我在这里做错了什么!?

另外 - 如果我将 NSMainNibFile 留空,那么 iPhone 模拟器只会出现黑屏。 (日志中没有错误)

【问题讨论】:

    标签: iphone ipad initialization ios-simulator


    【解决方案1】:

    事实证明,该项目在这种情况下需要一个 MainWindow.xib 文件。就我而言,我无意中从原始项目模板中删除了这个文件,并认为它没问题,因为它在硬件中模拟并运行良好。 (iPhone) MainWindow.xib 文件需要“UIApplication”类型的文件所有者、“UIResponder”类型的 First Responder、指向您的应用程序委托的自定义类型的 App Delegate。 (名称将根据您为项目命名的内容而有所不同)最后有一个 UIWindow 类型的窗口。所有这些都是默认设置,App Delegate 除外。

    一旦我包含了以这种方式配置的 xib,应用程序就会在 iPhone 和 iPad 模拟器中按预期加载。 (目前还不清楚为什么 iPad 模拟器对没有 MainWindow.xib 文件的处理方式不同)

    【讨论】:

    【解决方案2】:

    当您在代码中(或通过 IB 代码生成)引用在 iOS 4x 或更高版本中定义的常量时,可能会发生类似的行为,而 iPad 运行的是 3.2x,并且对这些关键定义一无所知。

    确保您的目标将 iOS 部署目标设置为 iOS 3.2,并将基本 SDK 设置为 4.1。如果您更改了这些值,请在重新编译之前进行清理。不幸的是,我认为在这种情况下您不会看到编译器警告。

    希望对您有所帮助。

    【讨论】:

    • 嗯。不错的想法,但结果相同。 iOS 部署目标设置为:iOS 3.2,Base SDK 到 4.1 设备(或模拟器,结果相同)。
    猜你喜欢
    • 1970-01-01
    • 2011-03-04
    • 2014-12-03
    • 2018-12-23
    • 1970-01-01
    • 1970-01-01
    • 2011-07-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多