NSInternalInconsistencyException,原因:无法在bundle中加载NIB

时间:2015-01-08 14:44:21

标签: ios objective-c

我已经就这个问题找到了很多答案,但似乎没有一个与我的问题有关。

我有两个视图,视图1有一个按钮。视图2有一个按钮。

View 1按钮与模型segue绑定到View 2。

我点击了视图1中的按钮,它打开了视图2。

在视图2中,按钮连接到发射的IBAction

[self dismissViewControllerAnimated:YES completion:nil];

关闭视图并再次显示视图1 - 现在,如果我再次按下视图1上的按钮,则

*** 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呈现图像,如果我从View 2转到该屏幕,则应用程序不会崩溃。

编辑2:

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

我完全不知所措。

编辑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

詹姆斯

8 个答案:

答案 0 :(得分:28)

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

我将开始列举一些要检查的内容和解决方案:

  1. 您是否在Xcode外重命名了xib或storyboard文件?如果是这样,请检查您所引用的任何地方是否存在不一致。另外,请确保在引用文件的任何地方都尊重大写/小写字母,因为区分大小写。

  2. 转到Interface Builder,选择View1 ViewController&gt;公用事业小组&gt; Identity Inspector&gt;如果你有一个(.h和.m文件),检查Custom Class是否对应于你的ViewController类。

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

  4. 检查您的目标Build Phases > Copy Bundle Resources并确保在那里添加了xib或storyboard文件。

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

  6. 在文件检查器中检查xib或情节提要文件的属性,并确保在Target Membership选择面板中将文件链接到目标。

  7. 检查文件检查器中xib或情节提要文件的属性,然后尝试将文件Location切换为Relative to projectRelative to group。看看两种方式是否有所不同。

  8. 如果您在initWithCoder中以编程方式添加视图控制器,则应使用viewDidLoad方法实例化

  9. 如果上述情况不适用于您的情况,您可以从Xcode中删除该文件(选择Remove References)并在项目中再次导入。

  10. 请记住,在进行上述更改后,请务必清理项目(SHIFT + COMMAND + K)。

    如果有效且有效,请告知我们。

答案 1 :(得分:2)

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

执行的步骤:

  • 点击xib文件。
  • Open Identity Inspector - &gt;目标成员资格并检查第二个选项(ProjectName_Resource)

答案 2 :(得分:1)

在访问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];

答案 3 :(得分:1)

当我从zip文件中提取.app并尝试在iOS设备和Simulator上运行它时,我遇到了这个问题。

一个.nib文件已用非拉丁字符(fileNormal.nib和希腊字母No)命名,并且从zip提取时,它是从另一个字符集分配的字母(应为希腊字母) -DOS或兼容的东西)。我在提取时选择了另一个字符集,它应能正常工作。

只要其他人遇到相同的问题,就把它放进去;)

答案 4 :(得分:0)

您可以尝试检查以下方案中的例外情况:

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

2)在解雇前检查IBAction方法,参考this

答案 5 :(得分:0)

UITableViewDataSource或UITableViewDelegate也未在所需的UIViewController中实现

答案 6 :(得分:0)

如果你正在使用cocoapods,它也可能有助于运行pod update。我的一个队友换了一个吊舱导致了这个错误,所以pod更新为我修好了。

答案 7 :(得分:0)

在我的情况下,完全相同的例外是由于两个控制器具有相同的故事板ID(在一个故事板中)而引起的