NSInternalInconsistencyException,原因:无法加载捆绑中的NIB

我已经经历了一堆关于这个问题的答案,但似乎没有涉及到我的问题。

我有两个视图,View 1有一个button。 视图2有一个button。

“查看1”button与“查看2”的模型相关联。

我点击视图1中的button,打开视图2。

在视图2中,该button连接到一个触发的IBAction

[self dismissViewControllerAnimated:YES completion:nil]; 

closures视图并再次显示视图1 – 现在,如果我再次按下视图1上的button,我会得到

 *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Could not load NIB in bundle: 'NSBundle <x/y/z/SomeApp.app> (loaded)' with name 'tvz-Io-ndz-view-rB8-bq-l6j' and directory 'Main.storyboardc'' 

我完全失去了如何解决这个问题。 请帮忙!

编辑:

  • 这只发生在设备没有互联网的时候
  • 如果我有一个呈现图像的webview链中的第三个屏幕,如果我从视图2转到该屏幕应用程序不会崩溃。

编辑2:

我也尝试从头开始重build屏幕。

我完全困惑。

编辑3:完整的Stacktrace

 2015-01-19 09:10:58.528 SomeApp[37747:2203364] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Could not load NIB in bundle: 'NSBundle </Users/user/Library/Developer/CoreSimulator/Devices/D23C1B7C-7330- 466E-8369-762C6727B19C/data/Containers/Bundle/Application/AE67C3D3-C5AE- 4A66-91EC-54D976A4A4FC/SomeApp.app> (loaded)' with name 'tvz-Io-ndz-view- rB8-bq-l6j' and directory 'Main.storyboardc'' *** First throw call stack: ( 0 CoreFoundation 0x01f64946 __exceptionPreprocess + 182 1 libobjc.A.dylib 0x01beda97 objc_exception_throw + 44 2 CoreFoundation 0x01f6486d +[NSException raise:format:] + 141 3 UIKit 0x008f8e06 -[UINib instantiateWithOwner:options:] + 1003 4 UIKit 0x0071b624 -[UIViewController _loadViewFromNibNamed:bundle:] + 270 5 UIKit 0x0071bdbb -[UIViewController loadView] + 295 6 UIKit 0x0071bfef -[UIViewController loadViewIfRequired] + 78 7 UIKit 0x0071c595 -[UIViewController view] + 35 8 UIKit 0x00d8f707 -[_UIFullscreenPresentationController _setPresentedViewController:] + 75 9 UIKit 0x006f1a81 -[UIPresentationController initWithPresentedViewController:presentingViewController:] + 113 10 UIKit 0x00729a61 -[UIViewController _presentViewController:withAnimationController:completion:] + 2102 11 UIKit 0x0072c5d2 __62-[UIViewController presentViewController:animated:completion:]_block_invoke + 345 12 UIKit 0x0072c424 -[UIViewController presentViewController:animated:completion:] + 224 13 UIKit 0x0072c8ea -[UIViewController presentModalViewController:animated:] + 57 14 UIKit 0x00bf448d -[UIStoryboardModalSegue perform] + 271 15 UIKit 0x00be1b49 -[UIStoryboardSegueTemplate _perform:] + 217 16 UIKit 0x00be1bc5 -[UIStoryboardSegueTemplate perform:] + 116 17 UIKit 0x006d4907 -[UITableView _selectRowAtIndexPath:animated:scrollPosition:notifyDelegate:] + 1490 18 UIKit 0x006d4af7 -[UITableView _userSelectRowAtPendingSelectionIndexPath:] + 285 19 UIKit 0x006d9df3 __38-[UITableView touchesEnded:withEvent:]_block_invoke + 43 20 UIKit 0x005ee0ce ___afterCACommitHandler_block_invoke + 15 21 UIKit 0x005ee079 _applyBlockToCFArrayCopiedToStack + 415 22 UIKit 0x005ede8e _afterCACommitHandler + 545 23 CoreFoundation 0x01e879de __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 30 24 CoreFoundation 0x01e87920 __CFRunLoopDoObservers + 400 25 CoreFoundation 0x01e7d35a __CFRunLoopRun + 1226 26 CoreFoundation 0x01e7cbcb CFRunLoopRunSpecific + 443 27 CoreFoundation 0x01e7c9fb CFRunLoopRunInMode + 123 28 GraphicsServices 0x043d524f GSEventRunModal + 192 29 GraphicsServices 0x043d508c GSEventRun + 104 30 UIKit 0x005c48b6 UIApplicationMain + 1526 31 SomeApp 0x000e482d main + 141 32 libdyld.dylib 0x027e8ac9 start + 1 ) libc++abi.dylib: terminating with uncaught exception of type NSException 

詹姆士

可能有很多原因会导致你收到的错误。

我将开始列举一些事情来检查和解决scheme:

  1. 你有没有在Xcode之外重新命名你的xib或storyboard文件? 如果是这样,请检查各处是否有不一致的参考。 另外,请确保您在参考文件的任何地方尊重大写/小写字母,因为区分大小写。

  2. 转到Interface Builder,select你的View1 ViewController> Utilities Panel> Identity Inspector >检查Custom Class对应于你的ViewController类,如果你有一个(.h和.m文件)。

  3. 检查你的Info.plist文件。 如果使用故事板,则应该有一个条目,如Main storyboard file base name和NOT Main nib file base name 。 如果你使用笔尖,反之亦然。 还要检查文件基本名称是否与实际文件的名称一致。

  4. 检查您的目标的Build Phases > Copy Bundle Resources ,并确保您的xib或故事板文件被添加到那里。

  5. 如果以编程方式实例化View1 ViewController,并且使用xib文件,请检查拼写错误的名称(请记住,区分大小写)。 此外,如果您当前将.xib文件格式附加到名称,请删除扩展名,因为它不应该被使用。 我的意思是这行代码UIViewController *controller = [[UIViewController alloc] initWithNibName:@"xibFileName" bundle:nil];

  6. 检查文件检查器中xib或storyboard文件的属性,并确保您的文件已链接到Target Membershipselect面板中的Target Membership

  7. 检查文件检查器中xib或storyboard文件的属性,并尝试将文件Location切换为Relative to projectRelative to group 。 看看是否有任何方式有所作为。

  8. 如果你在initWithCoder中以编程方式添加视图控制器,那么你应该在viewDidLoad方法中实例化它

  9. 如果上面没有任何内容适用于您的情况,则可以从Xcode中删除文件(select“ Remove References ),然后在项目中再次导入它。

请记住在进行上述更改(SHIFT + COMMAND + K)后始终清理您的项目。

请让我们知道它是否工作,什么工作。

我尝试了所有以上的答案,但他们没有工作。 对我来说,解决scheme是将xib包含到目标资源中。

执行的步骤:

  • 点击xib文件。
  • 打开Identity Inspector – >目标成员并检查第二个选项(ProjectName_Resource)

在访问xib之前,您可能必须设置该类的包:

的ObjectiveC:

 //Bundle initialisation NSBundle* bundle = [NSBundle bundleForClass:[self class]]; //Initialising the nib UIView *nibView = [[bundle loadNibNamed:@"nibFileName" owner:self options:nil] objectAtIndex:0]; //Display the ad (this will vary based on your application setup) [[[UIApplication sharedApplication] keyWindow] addSubview:nibView]; 

也可能UITableViewDataSource或UITableViewDelegate没有在所需的UIViewController中实现

如果您正在使用cocoapods,那么也可能有助于运行pod update 。 我的一个队友改变了一个荚,导致了这个错误,所以荚更新固定了我。

您可以尝试检查下面的例外情况:

1)如果nib文件丢失,则在Xcode中添加相同的文件

2)解雇前在IBAction方法里面检查一下,参考这个