【问题标题】:NSInternalInconsistencyException, reason: Could not load NIB in bundleNSInternalInconsistencyException,原因:无法在包中加载 NIB
【发布时间】:2015-03-06 17:19:42
【问题描述】:

我已经阅读了很多关于这个问题的答案,但似乎没有一个与我的问题有关。

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

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

我单击视图 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''

我完全不知道如何解决这个问题。请帮忙!

编辑:

  • 仅当设备没有互联网时才会发生这种情况
  • 如果链中的第三个屏幕带有呈现图像的 web 视图,如果我从视图 2 转到该屏幕,则应用不会崩溃。

编辑 2:

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

我完全糊涂了。

编辑 3:完整堆栈跟踪

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

詹姆斯

【问题讨论】:

  • 您能否展示呈现视图 2 的代码,以确保那里没有发生任何奇怪的事情?
  • @Stonz2 没有手写代码右键单击将按钮拖到第二视图并且没有任何额外的 Segue 处理代码。
  • view2 的“拆解”代码中缺少某些内容,某些进程您已启动但未正确清理。也许 view2 是某事的代表,并且有一个保留周期?以我的经验,只有在第一个 view2 没有正确发布时才会发生这种情况..
  • 覆盖 view2 中的 dealloc 并设置断点。并且 viewWillDisappear 事件中的 dealloc 永远不会被调用(我提示它不是当你没有到达 view3 时)
  • 谢谢@Jef 我明天回到办公室时会试一试。问题是为什么没有互联网功能的应用程序只会在设备上禁用互联网时崩溃? (如果设备上有互联网,它就可以正常工作)

标签: ios objective-c


【解决方案1】:

在我的情况下,完全相同的异常是由于两个控制器具有相同的情节提要 ID(在一个情节提要内)这一事实引起的

【讨论】:

    【解决方案2】:

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

    一个 .nib 文件以非拉丁字符命名(fileNormal.nib 带有希腊字母 No),当从 zip 中提取时,它被分配了另一个字符集的字母(它应该是 Greek-DOS 或其他字符)兼容的)。我在提取时选择了不同的字符集,它可以正常工作。

    只是把它放在以防其他人面临同样的问题;)

    【讨论】:

      【解决方案3】:

      我尝试了以上所有答案,但没有奏效。对我来说,解决方案是将 xib 包含到目标资源中。

      执行的步骤:

      • 单击 xib 文件。
      • 打开 Identity Inspector -> Target Membership 并检查第二个选项 (ProjectName_Resource)

      【讨论】:

        【解决方案4】:

        您可以尝试检查以下异常情况:

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

        2) 在关闭之前在 IBAction 方法中进行检查,参考this

        【讨论】:

          【解决方案5】:

          如果您正在使用 cocoapods,运行pod update 也可能会有所帮助。我的一个队友更换了一个导致该错误的 pod,因此 pod update 为我修复了它。

          【讨论】:

            【解决方案6】:

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

            【讨论】:

              【解决方案7】:

              您可能必须在访问 xib 之前为该类设置捆绑包:

              目标C:

              //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];
              

              【讨论】:

                【解决方案8】:

                可能有很多原因会引发您收到的错误。

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

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

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

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

                4. 检查目标的Build Phases &gt; Copy Bundle Resources 并确保在那里添加了您的xib 或故事板文件。

                5. 如果您以编程方式实例化 View1 ViewController 并使用 xib 文件,请检查 nib 名称是否存在拼写错误(请记住,区分大小写)。 此外,如果您当前将 .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),然后在您的项目中再次导入。

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

                请让我们知道它是否有效以及什么有效。

                【讨论】:

                • 这是一个很棒的原因列表。不知道你是怎么变出来的……但非常感谢!上面的#6 是为我们做的。 =)
                • 我的问题是我没有使用正确的包... bundle: Bundle(for:
                猜你喜欢
                • 1970-01-01
                • 2012-09-25
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2011-07-21
                • 2012-06-03
                • 1970-01-01
                相关资源
                最近更新 更多