【问题标题】:Crash when loading main xib on iPad only in universal app?仅在通用应用程序中在 iPad 上加载主 xib 时崩溃?
【发布时间】:2012-01-15 05:54:27
【问题描述】:

我有一个通用应用程序,但这个问题似乎只与 iPad 相关,与 iPhone 无关,因为 iPhone 版本加载了正确的 XIB。

问题几乎是,它没有为我的应用加载我的主 XIB。 我这样命名 XIB:

  1. 对于 iPhone:MyViewController.xib

    1. 对于 iPad:MyViewController_iPad.xib

我还删除了我的 MainWindow.xib,因为在通用应用程序的模板项目中,它在任何地方都没有显示 MainWindow.xib。

这就是我尝试在应用启动时加载视图的方式:

self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
        self.viewController = [[[ocrapiViewController alloc] initWithNibName:@"MyViewController" bundle:nil] autorelease];
    } else {
        self.viewController = [[[ocrapiViewController alloc] initWithNibName:@"MyViewController_iPad" bundle:nil] autorelease];
    }
 self.window.rootViewController = self.viewController;
[self.window makeKeyAndVisible];
return YES;

这是崩溃信息: 此行上的 SIGABRT [self.window makeKeyAndVisible];

这是崩溃日志:

2011-12-07 07:37:46.560 ocrapi[763:607] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Could not load NIB in bundle: 'NSBundle </var/mobile/Applications/29F4CD7A-149E-46EA-B280-3D188PP19D17/.app> (loaded)' with name 'MyViewController_iPad''

编辑1: 这是消息:

warning: No copy of <No file name> found locally, reading from memory on remote device.  This may slow down the debug session.

另外,如果我点击我的产品然后在 finder 中显示,然后显示包内容,MyViewController.xib 或 MyViewController_iPad.xib 不存在。应该是这样的吗?

【问题讨论】:

  • 分配self.window.rootViewController时,检查self.viewController是否不为空。
  • 不,它不是 NULL 我只是 NSLogged

标签: ios ipad xib universal


【解决方案1】:

确保您的 nib 确实是真正的名为 MyViewController_iPad.xib,且大小写完全一致。

确保 xib 文件位于目标列表中,以便在构建时复制到应用程序。

最后,确保您的 Info.plist 文件中没有 Main Nib 设置。

哦,还有一件事。不需要这段代码:

if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
    self.viewController = [[[ocrapiViewController alloc] initWithNibName:@"MyViewController" bundle:nil] autorelease];
} else {
    self.viewController = [[[ocrapiViewController alloc] initWithNibName:@"MyViewController_iPad" bundle:nil] autorelease];
}

只需致电initWithNibName:@"MyViewController"。如果你的 iPad 笔尖被命名为 MyViewController~ipad.xib(注意旋转,注意小写的“ipad”),当你在 iPad 上时,它会被自动选择。

【讨论】:

  • 你的意思是如果我点击项目然后去构建阶段?它以前不在,但我添加了它。现在没有崩溃,但它仍然没有加载视图。查看我的 edit1 以获取控制台在尝试加载视图时显示的新消息。
  • 如果你真的很难追踪到这个问题,我建议你往后退十码然后下注:从一个直接从 Xcode 4.2 模板制作的新项目重新开始。
  • 好的,稍后我会先尝试您编辑的答案。我的项目太大了,所以我宁愿不做一个全新的项目。
  • 从小处着手。毕竟,现在你需要做的就是说服自己,你可以展示一些初始界面!
  • 干得好! Info.plist 编辑器绝不是一个好的界面。在 xml 中查看文件确实很有帮助(在上下文菜单中打开为源代码) - 我不会尝试像那样编辑它,因为你可以在脚上开枪,让事情变糟而没​​有警告消息,但至少你可以看到真正发生了什么。
猜你喜欢
  • 2012-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-23
  • 2016-03-30
  • 1970-01-01
  • 2012-04-02
相关资源
最近更新 更多