NSInternalInconsistencyException',原因:'无法在捆绑中加载NIB:'NSBundle

在我的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; } 

提前致谢

当您重命名XCode以外的文件时,可能会发生此错误。 要解决它,你可以从你的项目中删除文件(右键单击 – 删除和“删除参考”)。

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

那么,我认为错误说,它不能在你的项目中find名为“RootViewController”的nib文件。

你正在写这些代码行,

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

同时你要求它加载一个名为“RootviewController”的nib文件。 它在哪里..? 你有一个名为“Rootviewcontroller”的xib文件吗?

只需从“initWithNibName:”中的nib名称中删除“.xib”即可。 根据文档,“.xib”是假定的,不应该使用。

我有一些子项目。

我通过将xib文件添加到项目的“复制包资源”构build阶段来解决此问题。

我经历了相同的问题很多次。 我为自己find的是,我连接的xib文件总是拼错的。 在我的情况下,这是导致例外的代码行:

* NSArray nib = [[NSBundle mainBundle] loadNibNamed:@“shelfcell”owner:self options:nil];

“shelfcell”是我的xib文件名。 但是我拼错了它作为“ShelfCell”,“shelfCell”等,这导致了例外。 所以不要太惹你了 检查代码行和拼写。 谢谢

如果更改xib文件的名称,也会发生这种情况,并且忘记更改所有引用的位置。

例如:MainWindow.xib是一个TabBarController,它包含一个名为FirstViewController的自定义ViewController以及关联的xib文件FirstView。 您将名称更改为SecondViewController和关联的xib文件到SecondView。

解:

打开MainWindow.xib(包含TabBarController):

  • select您更改的ViewController的选项卡。
  • 在身份检查器上,将自定义类的名称更改为SecondViewController。
  • 在属性检查器上,将xib名称更改为SecondView。

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

  • 在Identity Inspector上,将自定义类更改为SecondViewController。

或者您可能需要:

  • 右键单击SecondView.xib,validation是否启用了“标识和types – >目标成员”。
  • 确保“Build Phases – > Copy Bundle Resources”显示你的SecondView.xib
  • 我也发现我偶尔需要build立清洁,并从模拟器中删除应用程序,以实际更新xib文件。 模拟器有一个xib文件的内部caching,有点不一致。

为了我,

我没有在要求的目标中安装该笔尖。

第1步:在项目导航器中点击你的笔尖(即在第一个左边的标签)

第2步:转到文件检查器(即在第一个右键标签)

步骤3:转到目标成员并在要使用笔尖的目标上打勾。

这个错误有很多原因,我也得到了一个,解决了。

您可能会添加一个第三方框架,而不是将其包含在Copy Bundle Resources中。这为我解决了这个问题。

这样做如下。 转到目标 – > BuildPhases – > CopyBundleResources – >拖放您的框架并运行代码。

我已经重命名了一个xib,并有这个问题,我的解决scheme是手动编辑主窗口,并更改有问题的文本

在相关的xib中search有问题的xib名称(查看源代码)

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

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

它的工作

在开发iOS应用程序时,我也面临类似的问题。 简单的重新启动的xcode适合我。 希望这将有助于一个人。

我尝试了几件事情,最后对我有用的是删除(并移动到垃圾桶)有问题的.xib文件。 然后重新创build它。 为了方便起见,我将.xib中的东西临时复制到另一个.xib文件中,然后将其复制到新创build的文件中。

还要确保XIB文件包含在您的目标中。 当selectXIB文件时,检查文件检查器(右边第一个选项卡,中间有“目标成员资格”部分),必须检查你构build的目标,否则XIB文件将不被包含。

我遇到了这个错误很多时间,也研究了为什么会发生这个错误,最后我发现了这个错误,这个错误是我们拼写错误的.xib文件名时发生的一个愚蠢的错误。

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

此时,我把TableViewCell拼写为TabelViewCell ,因为有一段时间我们读到的感知是正确的,这是最常见的问题。 只需复制你的.xib文件名,并粘贴它。

我在设置一个可选的self.collectionView?.backgroundColor在init(编码器:我的集合vc的构造函数。

一旦我将viewDidLoad中的设置移动,exception消失了。 令人费解。