NSInternalInconsistencyException“原因是:”不能在包中加载NIB:“

2019-06-18 10:48发布

在我的AppDelegate有一个问题,我不明白。 RootViewController的最初叫的ViewController,我改变了它的名字。 该应用程序是由许多的ViewController形成以后我介绍一个UINavigationController。 为什么这个错误出现?

  NSInternalInconsistencyException', reason: 'Could not load NIB in bundle: 'NSBundle 
  /Users/XXXXXXXXXXXX/Library/Application Support/iPhone simulator/6.0/Applications/
  B7A7D461-1CFE-4B05-AF32-00B65FCFFF49/XXXXXXXXXX.app> (loaded)'with name 
 'RootViewController''

  *** First throw call stack:
  (0x1992012 0x1357e7e 0x1991deb 0x4bafac 0x37fe37 0x380418 0x380648 0x380882 0
  x380b2a  0x397ef5 0x397fdb x398286 0x398381 0x398eab 0x398fc9 0x399055 0x49e3ab 
  0x2ef92d 0x136b6b0 0x1f12fc0 0x1f0733c 0x1f12eaf 0x38e8cd 0x2d71a6 0x2d5cbf 
  0x2d5bd9 0x2d4e34 0x2d4c6e 0x2d5a29 0x2d8922 0x382fec 0x2cfbc4 0x2cfdbf 
  0x2cff55 0x2d8f67 0x2b30 0x29c7b7 0x29cda7 0x29dfab 0x2af315 0x2b024b 0x2a1cf8 
  0x1dbedf9 0x1dbead0 0x1907bf5 0x1907962 0x1938bb6 0x1937f44 0x1937e1b 0x29d7da
  0x29f65c 0x269d 0x25c5) 
  ibc++abi.dylib: terminate called throwing an exception
  (lldb) 

这是AppDelegate.h代码

  #import <UIKit/UIKit.h>

  @class RootViewController;

  @interface AppDelegate : UIResponder <UIApplicationDelegate>{

       UINavigationController *navigationController;
   }

  @property (strong, nonatomic) UIWindow *window;

  @property (strong, nonatomic) RootViewController *viewController;
  @property (strong, nonatomic) UINavigationController * navigationController;



  @end

这是AppDelegate.m的代码

  #import "AppDelegate.h"

  #import "RootViewController.h"



  @implementation AppDelegate

  @synthesize navigationController;
  @synthesize viewController;
  @synthesize window;



  - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:    (NSDictionary *)launchOptions
 {
         self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
        // Override point for customization after application launch.

         if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
               self.viewController = [[RootViewController alloc]      initWithNibName:@"RootViewController_iPhone.xib" bundle:nil];
   } else {
    self.viewController = [[RootViewController alloc] initWithNibName:@"RootViewController_iPad.xib" bundle:nil];
   }

    RootViewController *rootMenu=[[RootViewController alloc]initWithNibName:@"RootViewController" bundle:nil];

    self.navigationController =[[UINavigationController alloc]initWithRootViewController:rootMenu];

    self.window.rootViewController = self.navigationController;
    [self.window makeKeyAndVisible];
    return YES;
}

提前致谢

Answer 1:

当你的XCode外重命名文件可能会出现此错误。 为了解决这个问题,你可以只是从你的项目中删除文件(右键 - 删除和“删除参考”)。

然后你就可以在重新导入项目中的文件,一切都会好的。



Answer 2:

只是一味地去除从笔尖名称“的.xib”‘initWithNibName:’。 根据该文件,在“的.xib”假设并且不应该使用。



Answer 3:

嗯,我认为错误说,它无法找到您的项目名为“RootViewController的”笔尖文件。

你正在写的几行代码,

self.viewController = [[RootViewController alloc]      initWithNibName:@"RootViewController_iPhone.xib" bundle:nil];

self.viewController = [[RootViewController alloc] initWithNibName:@"RootViewController_iPad.xib" bundle:nil];

同时,你问它加载一个名为“RootViewController的”笔尖文件.. !! 它在哪里..? 你有一个名为“RootViewController的”一个XIB文件..?



Answer 4:

我已经经历了同样的问题了相当多的时间。 什么我发现我自己的是,厦门国际银行文件即时链接总是拼错。 在我而言,这是代码为我导致异常的行:

* NSArray的笔尖= [[一个NSBundle mainBundle] loadNibNamed:@ “shelfcell”所有者:自选项:无];

该“shelfcell”是我的厦门国际银行文件名。 但我有拼写错误为“ShelfCell”,“shelfCell”等,这导致例外。 所以不要错误你的头了。 检查的代码和拼写的线条。 谢谢



Answer 5:

我有一些子项目。

我通过添加XIB文件复制包资源建设主要项目的第一阶段解决了这个问题。



Answer 6:

这也可以,如果你改变你的厦门国际银行文件的名称,你忘记更改它被引用的所有地方发生,。

例如:MainWindow.xib中是包含一个名为FirstViewController关联XIB文件的firstView一个自定义的ViewController一个TabBarController。 您将名称更改为SecondViewController和关联XIB文件SecondView。

解:

打开MainWindow.xib中(包含TabBarController):

  • 选择是你改变了视图控制器的标签。
  • 在标识检查,更改自定义类的名字SecondViewController。
  • 在属性检查器中,改变厦门国际银行名称SecondView。

打开SecondView.xib(这是从FirstView.xib复制):

  • 在标识检查,自定义类更改为SecondViewController。

可选,您可能需要:

  • 右击SecondView.xib,验证“身份和类型 - >目标成员”已启用。
  • 确保“构建阶段 - >复制包资源”显示您SecondView.xib
  • 我还发现,我偶尔需要建立清洁,从模拟器删除该应用获取的厦门国际银行文件,以实际更新。 该仿真器是厦门国际银行文件的内部缓存就是有点不一致。


Answer 7:

为了我,

我没有安装所需的目标是笔尖。

第1步:单击项目导航您的笔尖(即在第一左侧选项卡)

第2步:进入文件检查器(即在第一右选项卡)

第3步:去商店,给会员和蜱在其中你想用你的笔尖的目标。



Answer 8:

有这么多的原因,这error.I也得到了一个和解决它。

它可能要添加第三方框架,不包括其在复制包Resources.That解决了这个问题对我来说。

具体步骤如下。 转到目标 - > BuildPhases - > CopyBundleResources - >拖放框架和运行代码。



Answer 9:

我曾改名厦门国际银行,并有这个问题,我的解决办法是手工编辑为主window.xib,改变违规文本

在相关XIB搜索违规XIB名称(视图源代码)

<viewController nibName="OldNibName" id="116" customClass="SomeViewController">

<viewController nibName="NewNibName" id="116" customClass="SomeViewController">

和它的工作



Answer 10:

另外,还要确保XIB文件包含在你的目标。 检查文件检查时,XIB文件,选择右侧(第一个选项卡,在中间有节“的目标成员”。你建立的目标必须进行检查,否则XIB文件将不被包括在内。



Answer 11:

我是在init(设置可选self.collectionView .backgroundColor编码器:我的收藏VC的构造。

有一次,我会在viewDidLoad中陆续安装程序异常不知何故消失。 令人费解。



Answer 12:

我花了时间找出什么是错的。但清理项目并获得成功。

Build -> Clean All

接受的解决方案很可能也正在..但是,这是足以让我。



Answer 13:

在开发iOS应用我也面临着类似的问题的种类。 Xcode的简单重新启动我的作品。 希望这将帮助一些之一。



Answer 14:

我试过几件事情,最后什么工作对我来说是删除(并移动到垃圾)有关的.xib文件。 然后重新创建它。 为了方便起见,我在的.xib复制的东西暂时到其他的.xib,然后再复制回到新创建的一个。



Answer 15:

我面临这个错误了大量的时间,而且研究为什么这个错误发生,最后,我抓住了这个错误,这个错误的时候,我们拼写错误时发生的错误愚蠢.xib文件名。

NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"TableViewCell" owner:self options:nil];

在这一点上,我拼错TableViewCellTabelViewCell ,因为一些时间的感知,我们读它是正确的,这是最常见的问题。 您只要复制.xib文件名,并将其粘贴。



Answer 16:

我得到当我试图gestureRecognizer添加到我的ViewController认为这个错误,目标是不是被自己看法,:

代替:

self.view.addGestureRecognizer(UITapGestureRecognizer(target: self.view, action: #selector(handleTap(_:))))

固定为:

self.view.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(handleTap(_:))))

而走了错误。



Answer 17:

请注意,如果您使用的是[self class] nibName]可以,如果你使用的是迅速返回不同的名字......可能比你期望它返回的名称不同。

特别是如果你有多个目标,为您的代码。

在这种情况下,尝试重写:

override var nibName: String?{
        return "YourXibFileName" // No .xib at the end :)
}


文章来源: NSInternalInconsistencyException', reason: 'Could not load NIB in bundle: 'NSBundle