【问题标题】:iOS6: UIViewController was unable to load nib namediOS6:UIViewController 无法加载名为 nib
【发布时间】:2012-09-08 00:50:56
【问题描述】:

iOS6 模拟器中进行测试时,单击披露指示器时出现以下错误:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIViewController _loadViewFromNibNamed:bundle:] was unable to load a nib named "LocationDetail"'

它在iOS5 中运行得非常好。

我没有 LocationDetail 笔尖,也不需要使用它。我查看了我的整个项目以获取对它的引用,以及我的 MainWindow nib 和所有连接,以查看它可以在哪里使用,但我没有找到。

XCode 怎么还想加载这个,为什么只有iOS6 中的错误?

【问题讨论】:

  • 你还有LocationDetailViewController 课程吗?
  • 是的,我仍然使用它。我使用以下方法创建它: LocationDetail *detail = [[LocationDetail alloc] initWithStyle:UITableViewStyleGrouped];在 .m 中没有加载 nib 文件或任何东西的方法。没有引用 LocationDetail 笔尖。
  • 查看 Build Phases 选项卡中的 Copy Bundle Resources 并查看该 xib 文件是否仍然存在。如果是这样,您可以从那里删除它。
  • 不是。所以,我决定重命名我的类和 .h 和 .m 文件,这样就解决了这个问题。

标签: objective-c ios xcode cocoa-touch ios6


【解决方案1】:

问题不在于 Xcode,而在于 iOS 模拟器。如果您已删除项目中对 .xib 的所有引用,并按照您的描述清理了所有内容,那么问题是 .xib 文件仍然存在于模拟器中的应用程序包中。您应该尝试从模拟器中删除应用程序(或者更好的是,重置模拟器上的所有内容和设置)。这将解决它。

【讨论】:

    【解决方案2】:

    我知道的是 initWithStyle:UITableViewStyleGrouped 会调用 initWithNibName:Bundle: 方法...

    您的类与您的 nib 文件同名,因此当您调用 initWithStyle:UITableViewStyleGrouped 时,它会尝试加载该 nib 文件。

    当您重命名班级时,它没有找到具有相同班级名称的笔尖,因此没有像以前那样出现错误。

    【讨论】:

    • 是的,但是 nib 文件已被删除。久违了!
    • 我之前也遇到过类似的问题...我当时所做的是执行清理(产品 -> 清理),通常它可以解决我删除文件的问题。
    【解决方案3】:

    我决定只重命名我的类和 .h 和 .m 文件,这样就解决了问题。

    谁知道为什么。

    【讨论】:

    • 它触发了你的实现文件的重新编译。 ;)
    • 好东西。仍然无法弄清楚它是如何知道我的旧笔尖的。
    • 可能是一些默认的 nib 加载行为 - 例如,如果您执行 [[MyViewController alloc] init],它会默认查找 MyViewController.xib
    • 不,但是 initWithNibName:nil 会:) @CarlVeazey
    • @borrrden 足够公平,但 init 调用 initWithNibName:nil
    猜你喜欢
    • 2017-07-10
    • 2023-03-26
    • 2013-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多