我正在尝试测试我正在iPhone上开发的应用。为此,我在Xcode上将目标从Simulator更改为Device。应用程序已正确上载到设备并且可以正常运行。显示主视图,但如果我尝试打开辅助视图,应用程序崩溃。
在iPhone日志上(我安装了iPhone配置实用程序以查看控制台[是从iPhone查看日志的唯一方法吗?])我可以看到此错误:
Could not load NIB in bundle
但是,在模拟器上它工作正常。怎么了?有什么想法吗?
答案 0 :(得分:62)
我遇到了同样的问题并修复了它:
答案 1 :(得分:22)
我发现有时设备区分大小写并且模拟器不是。
你的xib的文件名是什么?
或
尝试从模拟器中卸载应用程序并再次安装 - 模拟器可能在上一次应用程序运行时遗留了旧文件 - 您是否在开发期间重命名/移动了xib?
答案 2 :(得分:18)
我遇到了类似的问题并且遇到了同样的错误。结果我在“NIB名称:”
下的属性面板中使用了xib文件的全名不要使用“SomeViewController.xib”,只使用不带“.xib”扩展名的“SomeViewController”。
答案 3 :(得分:9)
我在调用initWithNibName:@"MyViewController"
将调用更改为initWithNibName:NSStringFromClass([MyViewController class])
效果很好
答案 4 :(得分:9)
你可以试试这些:
答案 5 :(得分:5)
就我而言,xib根本没有被复制到包中。一旦我将xib添加到应用程序目标的“Copy Bundle Resources”步骤中,一切都很顺利。
答案 6 :(得分:3)
我终于通过以下两个步骤解决了这个问题:
我不知道它为何在模拟器上运行:(
答案 7 :(得分:3)
对我来说,问题正是FreeAsInBeer所说的那样:nib以某种方式从包中丢失了,而它之前曾经存在并在应用程序的早期版本中正常工作。
要解决此问题,我执行了以下操作:
当我得到那条消息时,这就是对我有用的东西。您的里程可能会有所不同,因为每个人的情况并不总是一样,但我希望这可以帮助遇到此问题的人。
-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。不是说这是你的问题,但这可能对其他人有所帮助。