无法加载名为“TwitterDrilldownView”的笔尖

时间:2010-05-04 13:01:09

标签: iphone objective-c xcode

-[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文件的任何引用,但无济于事。

有没有人有这方面的经验或知道可能的解决方案?

2 个答案:

答案 0 :(得分:2)

从我的项目中删除XIB文件后,这也发生在我身上。但是,我做了一些搞乱,并能够解决问题。

关键点在于 Xcode似乎在某处创建了某种引用,因为您在其中创建了XIB和出口/操作,并且手动删除XIB文件只是孤立这些引用。使用接口构建器(UB)和XIB逐个删除这些连接似乎正确地取消引用它们。

解决方案非常明确:

  1. 重新创建具有相同名称和类似结构的XIB文件(包括之前的插座和操作)。 (注意:如果您不记得如何重新构建XIB的出口和操作,只需重新创建具有相同名称的XIB文件,并跳到我的'如果它仍然失败'下面的注释。)
  2. 使用界面构建器(IB)手动逐个删除XIB中的所有插座和操作。
  3. 重新构建应用;如果它现在有效,你可以删除XIB。
  4. 注意:如果它仍然失败,您可能会有不同的错误。如果错误引用了键值合规性,那么它将列出一个方法错误 - 并且该方法是您的问题。请确保在IB中重新创建指定的插座/操作,并使用IB手动删除它。这似乎在Xcode /您的构建环境中取消引用该调用。)

    快乐狩猎!

答案 1 :(得分:1)

应使用initWithNibName:bundle:方法初始化UIViewController。在其描述中说明:

  

这是指定的初始化程序   这堂课。

     

如果为nibName指定nil   参数并且不要覆盖   自定义中的loadView方法   子类,默认视图控制器   行为是寻找一个nib文件   谁的名字(没有.nib   extension)匹配你的名字   查看控制器类。如果找到了   一,类名成为值   nibName属性的结果   在相应的nib文件中   与此视图控制器关联。

因此,如果您没有从nib文件加载视图控制器,请确保覆盖loadView方法并在其中设置控制器的view属性。
希望这会有所帮助。