这与此处众多其他类似问题的情况不同。
*由于未捕获的异常'NSInternalInconsistencyException'而终止应用,原因:' - [UIViewController _loadViewFromNibNamed:bundle:]加载了GameView笔尖但视图出口未设置。
你可能会想“按照它的说法,将文件所有者连接到IB中的视图!”。但问题是,我甚至在项目中甚至在项目目录中都没有GameView.xib。
我的项目中有一个“GameViewController.m”和匹配的“GameViewController.xib”。使用GameViewController会出现这个错误,但我不明白尝试加载“GameView.xib”的想法。它不应该使用“GameViewController.xib”吗?
如果我grep我的项目目录,我确实看到它来自“UserInterfaceState.xcuserstate”。
<string>file://localhost/Users/bemmu/Dropbox/b2/iphone/ValleyStory/ValleyStory/GameView.xib</string>
此提到的文件不存在。我之前可能有一个带有该名称的文件,并重命名/删除它,但它没有被我在IB中看到的任何地方引用。
我是否设法混淆了xcode? p>
答案 0 :(得分:19)
我的解决方案有点不同。
答案 1 :(得分:5)
检查您正在使用的任何nib文件(如MainWindow.xib)。如果要从笔尖加载GameViewController,请检查它正在加载的文件(在检查器的信息选项卡下)。确保它设置为“GameViewController”而不是“GameView”。
答案 2 :(得分:5)
我也有这个问题,但必须以不同的方式解决它。基本上,我有一个视图控制器名称MainViewController,它有一个名为MainViewController.xib的xib。这个笔尖的视图属性设置为文件所有者,它是MainViewController。
我还创建了一个MainView.xib,其中包含一个视图,该视图将以编程方式添加到MainViewController.xib中定义的视图及其视图中。它基本上封装了一个内部视图,该视图位于MainViewController.xib的视图中,并且还将其文件所有者设置为MainViewController。
基本上,我希望MainViewController.xib作为MainViewController对象的nib加载,而在MainViewController中,稍后,我会添加MainView.xib指定的内部视图。
出现了几个问题:
1。)我在Apple文档中发现通过storyboard或nib加载视图控制器时:
“如果视图控制器类名称以”Controller“结尾,则为 在MyViewController中,它查找名称与之匹配的nib文件 没有单词“Controller”的类名,如MyView.nib。
它查找名称与视图名称匹配的nib文件 控制器类。例如,如果类名是MyViewController, 它查找MyViewController.nib文件。“
因此,如果你还有一个名为MainViewController的nib并希望MainViewController.xib成为MainViewController的主要nib,你就不能有一个名为MainView.xib的nib。
2.。)即使您删除MainView.xib或将其重命名为其他东西(在本例中为MainInternalView.xib),您必须删除/清理您的iOS模拟器,因为旧的nib文件(MainView.xib)仍将保留应用程序。重建/重新运行应用程序时,它不会覆盖整个应用程序包。
如果您不想重置内容设置(可能需要保留一些数据),请右键单击iOS模拟器文件夹中的应用程序,显示包内容,找到MainView.nib,然后删除它。重建时Xcode不会自动为您执行此操作,因此我们需要手动删除旧笔尖。
总的来说,不要让名为MainViewController和MainView的nib,即具有相同前缀的nib。调用MainView.xib,比如MainInternalView.xib。
答案 3 :(得分:2)
我最近解决了这个问题。确保在按照此处给出的步骤(以防万一)之前备份项目。这些步骤解决了我的问题
UserInterfaceState.xcuserstate
的{{1}}并删除该文件。.xcodeproj/project.xcworkspace/xcuserdata/<username>.xcuserdata
,它将是干净的。答案 4 :(得分:1)
在我的情况下,我根本没有使用xib。我需要从Build Phases&gt;中删除.m文件。编译源并将其添加回来。
答案 5 :(得分:0)
鉴于您之前引用它,听起来xcode尚未确认它不再存在。从产品菜单中选择“清洁”,然后选择“构建”,希望这将超过您的旧参考。
答案 6 :(得分:0)
面对同样的问题,必须在代码中更改视图的名称:
MyViewController *controller = [[MyViewController alloc] initWithNibName:@"WrongViewName" bundle:nil];
要
MyViewController *controller = [[MyViewController alloc] initWithNibName:@"RightViewName" bundle:nil];
答案 7 :(得分:0)
我有多个观点,偶然(我不知道这是怎么发生的)但我的背景视图没有文件所有者,因此对于将来遇到此问题的其他人,请确保所有观点拥有文件所有者。
答案 8 :(得分:0)
我遇到了同样的错误,然后从界面构建器中检查类名,看到我在自定义类属性中键入了视图控制器类名。
答案 9 :(得分:0)
UIViewController在传递nil到initWithNibNamed:bundle:
时搜索与控制器同名的nib。检查传递给初始化程序的文件名是否正确且存在!
例如:(例如[[CCVisitorsController alloc] initWithNibName:nil bundle:nil]
然后UIViewController尝试加载名称为CCVisitorsController
的nib作为默认值。
如果该文件不存在,则抛出您提到的错误。
答案 10 :(得分:0)
我遇到了这个问题,因为我在
做了一件坏事NIB加载。
答案 11 :(得分:0)