Iphone 无法加载名为“的nib”;TwitterDrilldownView“;

Iphone 无法加载名为“的nib”;TwitterDrilldownView“;,iphone,objective-c,xcode,Iphone,Objective C,Xcode,当我将新的ViewController推到导航堆栈上时,会出现上述错误。这是推码 [self.navigationController pushViewController:[[TwitterDrilldownViewController alloc]initWithTwitterAnnotation:temp]autorelease]动画:是]; 基本上,我只是将一个新分配和初始化的视图推到堆栈上。ViewController的init方法是 -[UIViewController _loa

当我将新的ViewController推到导航堆栈上时,会出现上述错误。这是推码


[self.navigationController pushViewController:[[TwitterDrilldownViewController alloc]initWithTwitterAnnotation:temp]autorelease]动画:是];

基本上,我只是将一个新分配和初始化的视图推到堆栈上。ViewController的init方法是

-[UIViewController _loadViewFromNibNamed:bundle:] was unable to load a nib named "TwitterDrilldownView"
正如您所看到的,我没有使用任何initializewithnib方法,并且在我的项目中没有名为TwitterDrilldownView的nib文件

在创建名为TwitterDrillDownView的TwitterDrillDownView控制器之前,我确实有一个nib文件,但我使用它来测试布局,而且,我从来没有使用过它。当我创建TwitterDrillDownView控制器时,TwitterDrillDownView.nib出现在项目中,在这个阶段之后,我删除了该nib

我能想到的导致这个问题的唯一原因是Xcode以某种方式创建了对nib文件的依赖,因为nib文件和视图控制器的名称相同(TwitterDrilldownView.nib,TwitterDrilldownViewController.m),好像它试图提供帮助,但最终却把我的项目搞砸了

我曾尝试删除并重新创建视图控制器,希望任何引用都会被销毁,并删除了项目中对nib文件的任何引用,但没有效果


是否有人对此问题有任何经验或知道可能的解决方案?

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

这是的指定初始值设定项 这个班

如果指定NIB名称为nil 参数,而不重写 自定义视图中的loadView方法 子类,默认视图控制器 行为是查找nib文件 谁的名字(不带.nib) 扩展名)与您的 视图控制器类。如果发现 第一,类名成为值 nibName属性的 在相应的nib文件中 与此视图控制器关联

因此,如果不从nib文件加载视图控制器,请确保覆盖
loadView
方法,并在其中设置控制器的
view
属性。

希望这会有所帮助。

从项目中删除一个XIB文件后,我也遇到了这种情况。然而,我做了一些胡闹,并能够解决问题

关键的一点是,Xcode似乎在您在其中创建XIB和outlets/actions时将某种引用保留在某个地方,手动删除XIB文件只会孤立这些引用。使用interface builder(UB)和XIB逐个删除这些连接似乎可以正确地取消引用它们

解决方案非常清楚:

  • 重新创建一个具有相同名称和类似结构的XIB文件(包括以前的出口和操作)。(注意:如果您不记得如何重新构建XIB的出口和操作,只需使用相同的名称重新创建XIB文件,并跳到下面我的“如果仍然失败”注释。)
  • 使用interface builder(IB)逐个手动删除XIB中的所有出口和操作
  • 重新构建应用程序;如果现在有效,您可以删除XIB
  • 注意:如果仍然失败,您可能会遇到另一个错误。如果错误涉及键值符合性,那么它会在错误中列出一个方法,而该方法就是您的问题。请确保在IB中重新创建命名的出口/操作,并使用IB手动删除它。这似乎会取消引用Xcode/buil中的调用d)环境。)


    狩猎快乐!

    评论不错,谢谢你提供的信息(我不知道)但在这种情况下,它不适用,因为我有其他视图控制器,它们都是以完全相同的方式初始化的,都不需要重写loadView。一个区别是,我没有任何其他视图的nib文件,所以我仍然确信它一定是Xcode中的某个错误。我通过重命名我的TwitterDrilldownViewCont解决了这个问题我只能假设Xcode确实对旧的nib文件有一些不正确的引用,我仍然很好奇是否还有其他人有这个问题。再次感谢。嗯,也许你应该取消我的答案被接受的标记-可能有人会指出这个问题的真正解决方案吗?我认为你的答案对这一点很好,并且会我会帮助其他有这个问题的人。我的具体问题似乎很模糊,所以我就不说了。删除笔尖后出现完全相同的问题-你解决过这个问题吗?我的解决方案是重命名ViewController,不幸的是我唯一能做的事。如果仍然是b,我想苹果的一个记录错误是个好主意roken 2年多后:):)我还找到了另一个解决方案,我将在下面说明。。太好了,我很高兴将此转移到公认的答案,因为您已经指定了调试和修复问题的更有用的步骤。
    - (id)initWithTwitterAnnotation:(TwitterInfo *)aPOI {  
      if(self = [super init]) {
        poi = aPOI;
      }
    
      return self;
    }