无法在iPhone设备上加载nib

时间:2010-11-11 14:20:02

标签: iphone ios4

我正在尝试测试我正在iPhone上开发的应用。为此,我在Xcode上将目标从Simulator更改为Device。应用程序已正确上载到设备并且可以正常运行。显示主视图,但如果我尝试打开辅助视图,应用程序崩溃。

在iPhone日志上(我安装了iPhone配置实用程序以查看控制台[是从iPhone查看日志的唯一方法吗?])我可以看到此错误:

Could not load NIB in bundle

但是,在模拟器上它工作正常。怎么了?有什么想法吗?

16 个答案:

答案 0 :(得分:62)

我遇到了同样的问题并修复了它:

  1. 打开XCode目标
  2. 点击“构建阶段”标签
  3. 点击“复制捆绑资源”部分
  4. 点击+
  5. 添加缺少的Nib文件

答案 1 :(得分:22)

我发现有时设备区分大小写并且模拟器不是。

你的xib的文件名是什么?


尝试从模拟器中卸载应用程序并再次安装 - 模拟器可能在上一次应用程序运行时遗留了旧文件 - 您是否在开发期间重命名/移动了xib?

答案 2 :(得分:18)

我遇到了类似的问题并且遇到了同样的错误。结果我在“NIB名称:”

下的属性面板中使用了xib文件的全名

不要使用“SomeViewController.xib”,只使用不带“.xib”扩展名的“SomeViewController”。

答案 3 :(得分:9)

我在调用initWithNibName:@"MyViewController"

时遇到了同样的问题

将调用更改为initWithNibName:NSStringFromClass([MyViewController class])效果很好

答案 4 :(得分:9)

你可以试试这些:

  1. 确保案例正确
  2. 使用不带“.xib”扩展名的xib文件名
  3. 删除任何 - (破折号)或其他特殊字符,使用_(下划线)
  4. 从项目中删除x​​ib文件并添加回Xcode项目
  5. 检查构建设置并确保将部署更改为当前SDK

答案 5 :(得分:5)

就我而言,xib根本没有被复制到包中。一旦我将xib添加到应用程序目标的“Copy Bundle Resources”步骤中,一切都很顺利。

答案 6 :(得分:3)

我终于通过以下两个步骤解决了这个问题:

  1. 在视图控制器文件检查器中,删除任何本地化 (仅供测试)
  2. 确保您已检查了正确的目标成员资格
  3. 我不知道它为何在模拟器上运行:(

答案 7 :(得分:3)

对我来说,问题正是FreeAsInBeer所说的那样:nib以某种方式从包中丢失了,而它之前曾经存在并在应用程序的早期版本中正常工作。

要解决此问题,我执行了以下操作:

  1. 在Project Navigator中选择项目。
  2. 在项目设置中,选择构建阶段
  3. 展开复制捆绑资源
  4. 向下滚动(如有必要),然后点击 + 按钮。
  5. 在显示的对话框中,点击添加其他... 按钮。
  6. 在文件系统中浏览缺少的.XIB文件。
  7. 构建并运行...运行时应显示缺少的笔尖。
  8. 当我得到那条消息时,这就是对我有用的东西。您的里程可能会有所不同,因为每个人的情况并不总是一样,但我希望这可以帮助遇到此问题的人。

    -Evan

答案 8 :(得分:2)

我遇到了同样的问题。在我的例子中,笔尖名称是“MyViewController.xib”,我将其重命名为“MyView.xib”。这摆脱了错误。

我还将一个项目从XCode 3移动到4.2。更改路径类型并不重要。

答案 9 :(得分:2)

我有同样的错误消息。 然而,我的问题是我手机上的语言设置设置为“英语”和“英国”区域。但是,无法加载的文件放在de.lproj目录中。 将文件移动到根目录解决了它。

答案 10 :(得分:2)

可能导致此错误的一个简单错误是在使用故事板而不是单个Nib文件时尝试在导入的viewController上使用initWithNibName。如果是这种情况,则只需初始化控制器,而不是尝试使用不存在的nib进行初始化,或者使用nil初始化这些字段。

如果是Storyboard而没有nib,请更改initWithNibName:bundle:to just init或initWithNibName:nil bundle:nil

答案 11 :(得分:1)

为了它的价值,当我的一个标签栏按钮分配了错误的类时,我收到了这个错误。

答案 12 :(得分:1)

我已经通过删除xib中的所有本地化来运行它 在右边的窗口。 也许该文件位于本地化文件夹中。

答案 13 :(得分:1)

我遇到了同样的问题。我的解决方案是删除视图的所有本地化。

答案 14 :(得分:1)

我完全按照你描述的行为:在模拟器上工作,但在设备上运行时得到“无法在包中加载NIB”,并且应用程序仍然卡在启动图像上。

在我的情况下,问题是关于Xcode自动使用英语本地化创建的MainWindow.xib文件。我在我的应用程序中支持英语和意大利语,并意识到我错过了意大利语的MainWindow.xib的本地化版本。

因为我不需要本地化这个文件(它的Xcode默认是创建本地化的)我通过简单地删除英文本地化来解决问题,因此使用相同的文件独立于本地化。解决问题的另一种方法是在需要时添加缺少的本地化版本。

该应用程序在设备上崩溃,因为我的设备配置为意大利语。相反,模拟器设置为英语,这就是应用程序正常运行的原因。为了验证,我将模拟器设置为意大利语,应用程序崩溃,确认了本地化问题。

答案 15 :(得分:1)

当我从initWithCoder加载一个子视图控制器时,我也遇到了这个问题,这是一个初始化的好地方,但请记住,你必须在视图加载后将它添加为一个真正的子视图。

所以改变这样的事情:

[self addChildViewController: self.pageViewController];
[self.view addSubview: self.pageViewController.view];
[self.pageViewController didMoveToParentViewController:self];

...从你的init方法进入viewDidLoad。不是说这是你的问题,但这可能对其他人有所帮助。