-[UIViewController _loadViewFromNibNamed:bundle:] was unable to load a nib named "TwitterDrilldownView"
当我将新的ViewController推送到导航堆栈时,我收到上述错误。这是推送代码,
[self.navigationController pushViewController:[[[TwitterDrilldownViewController alloc] initWithTwitterAnnotation:temp] autorelease] animated:YES];
基本上我只是将新分配和初始化的视图推送到堆栈上。 ViewController的init方法是
- (id)initWithTwitterAnnotation:(TwitterInfo *)aPOI {
if(self = [super init]) {
poi = aPOI;
}
return self;
}
正如您所看到的,我不使用任何使用nib方法初始化,并且在我的项目中没有名为TwitterDrilldownView的nib文件。
在创建名为TwitterDrillDownView的TwitterDrilldownViewController之前,我确实有一个nib文件,但是我用它来测试布局,并且再次从未使用它。当我创建TwitterDrilldownViewController时,TwitterDrillDownView.nib出现在项目中,并且在此阶段后我删除了笔尖。
我能想到的唯一原因是Xcode以某种方式创建了对nib文件的依赖,因为nib文件和视图控制器的名称相同(TwitterDrilldownView.nib,TwitterDrilldownViewController.m),就好像它是试图提供帮助,但最终搞砸了我的项目。
我尝试删除并重新创建视图控制器,希望任何引用都会被销毁,并删除对项目中nib文件的任何引用,但无济于事。
有没有人有这方面的经验或知道可能的解决方案?
答案 0 :(得分:2)
从我的项目中删除XIB文件后,这也发生在我身上。但是,我做了一些搞乱,并能够解决问题。
关键点在于 Xcode似乎在某处创建了某种引用,因为您在其中创建了XIB和出口/操作,并且手动删除XIB文件只是孤立这些引用。使用接口构建器(UB)和XIB逐个删除这些连接似乎正确地取消引用它们。
解决方案非常明确:
(注意:如果它仍然失败,您可能会有不同的错误。如果错误引用了键值合规性,那么它将列出一个方法错误 - 并且该方法是您的问题。请确保在IB中重新创建指定的插座/操作,并使用IB手动删除它。这似乎在Xcode /您的构建环境中取消引用该调用。)
快乐狩猎!
答案 1 :(得分:1)
应使用initWithNibName:bundle:
方法初始化UIViewController。在其描述中说明:
这是指定的初始化程序 这堂课。
如果为nibName指定nil 参数并且不要覆盖 自定义中的loadView方法 子类,默认视图控制器 行为是寻找一个nib文件 谁的名字(没有.nib extension)匹配你的名字 查看控制器类。如果找到了 一,类名成为值 nibName属性的结果 在相应的nib文件中 与此视图控制器关联。
因此,如果您没有从nib文件加载视图控制器,请确保覆盖loadView
方法并在其中设置控制器的view
属性。
希望这会有所帮助。