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

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

问题描述:

-[UIViewController _loadViewFromNibNamed:bundle:] was unable to load a nib named "TwitterDrilldownView" 

当我将新的ViewController推入导航堆栈时,出现上述错误。这是推送代码,无法加载名为“TwitterDrilldownView”的笔尖

[self.navigationController pushViewController:[[[TwitterDrilldownViewController alloc] initWithTwitterAnnotation:temp] autorelease] animated:YES];

基本上我只是推一个新分配并初始化欣赏到堆栈。在视图控制器的init方法是,

- (id)initWithTwitterAnnotation:(TwitterInfo *)aPOI { 
    if(self = [super init]) { 
    poi = aPOI; 
    } 

    return self; 
} 

正如你所看到的,我不使用任何初始化笔尖方法并没有在我的项目命名为TwitterDrilldownView没有笔尖文件。

我有一个笔尖文件我创建了TwitterDrilldownViewController之前调用TwitterDrillDownView,但我用它来测试布局,并再次,从来没有使用过。当我创建TwitterDrilldownViewController时,TwitterDrillDownView.nib出现在项目中,并且在此阶段之后,我删除了笔尖。

我能想到的唯一原因是Xcode以某种方式创建了对nib文件的依赖关系,因为nib文件和视图控制器被命名为相同(TwitterDrilldownView.nib,TwitterDrilldownViewController.m),就好像它试图有帮助,但最终搞乱了我的项目。

我试图删除,并在希望的任何引用将被销毁重新创建视图控制器,并在项目,但无济于事除去笔尖文件的任何引用。

有没有人请了这个问题的任何经验或知道一个可能的解决方案?

+0

在删除NIB后有完全相同的问题 - 你有没有解决过这个问题? – toblerpwn 2012-08-15 20:54:24

+0

我的决议是重命名ViewController,不幸的是我能做的唯一事情。猜测与苹果计算机的一个记录的错误将是一个好主意,如果它仍然是2年以上的破碎:) – sciritai 2012-08-16 11:51:43

+0

:)我还发现了另一种解决方案,我将在下面注意.. – toblerpwn 2012-08-16 23:18:21

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

关键的一点是,Xcode中似乎你在其中创建XIBs和出口/行动,和删除XIB文件手动只是这些孤儿参考保持某种参考地方。使用接口生成器(UB)和XIB逐个删除这些连接似乎可以正确地解除引用它们。

解决方案然后很清楚:

  1. 重新创建相同的名称和类似的建筑(包括出口和动作,你收到)的XIB文件。 (注意:如果您不记得如何重新构建XIB的插座和操作,只需重新创建具有相同名称的XIB文件,并跳到下面的'如果它仍然失败'的注释。)
  2. 手动一个接一个地使用界面构建器(IB)删除XIB中的所有插座和操作。
  3. 重新构建应用程序;如果它现在可以工作,则可以删除XIB。

注:如果它仍然失败,你可能有一个不同的错误如果错误是指键值遵守然后它会列出该错误的方法 - 那方法是你的。问题:确保你在IB中重新创建了命名的插件/动作,并使用IB手动删除它,这似乎取消了Xcode /你的编译环境中的调用。)

快乐狩猎!

+0

太好了,我很高兴将这个问题转化为可接受的答案,因为您已经指定了更多有用的步骤来调试和解决问题。 – sciritai 2012-08-17 00:16:02

UIViewController中应该使用initWithNibName:bundle:方法被初始化。在其描述中指出:

这是 这个类的指定初始值设定项。

如果为nibName 参数指定为零,并在您的自定义 子类不重写 的loadView方法,默认视图控制器 行为是寻找一个笔尖文件 其名称(不笔尖 扩展)与您的 视图控制器类的名称相匹配。如果找到一个 ,类名成为nibName属性,它在相应的笔尖文件是与该视图相关联的控制器导致 的值 。

所以,如果你不加载您从笔尖文件控制器确保你重写loadView方法和设置控制器在它view财产。
希望这会有所帮助。

+0

伟大的评论和感谢信息(我didn' )但在这种情况下,它不适用,因为我有其他视图控制器的初始化方式完全相同,都不需要重写loadView。唯一的区别是我没有任何其他的nib文件,所以我仍然坚信它一定是Xcode中的某个bug。 我通过稍微重命名我的TwitterDrilldownViewController解决了问题,它现在可以工作。我只能假设Xcode确实对旧的nib文件有一些不正确的引用,并且我仍然对任何其他人是否有此问题感到好奇。再次感谢。 – sciritai 2010-05-04 14:02:36

+0

嗯,可能是你应该取消我的答案为已接受 - 可能有人会指出真正的解决方案,这个问题? – Vladimir 2010-05-04 14:10:38

+0

我认为你的答案对此很有帮助,并且可以帮助任何有此问题的人。我的具体问题似乎很模糊,所以我会留下它。 – sciritai 2010-05-04 15:22:43