【问题标题】:libc++abi.dylib: terminating with uncaught exception of type NSException (lldb)libc++abi.dylib:以 NSException (lldb) 类型的未捕获异常终止
【发布时间】:2014-12-14 01:31:59
【问题描述】:

我正在快速编写一个应用程序,当我在 iPhone 模拟器上运行测试应用程序时,一切正常,但是我尝试向右滑动,这是我添加的一个手势,以便它转到下一页(查看控制器二)它崩溃并在控制台日志中显示此错误报告。

2014-10-18 12:07:34.400 soundtest[17081:818922] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<soundtest.ViewControllerTwo 0x7f92f1f20090> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key sfdfa.'
*** First throw call stack:
(
    0   CoreFoundation                      0x00000001067813f5 __exceptionPreprocess + 165
    1   libobjc.A.dylib                     0x00000001082afbb7 objc_exception_throw + 45
    2   CoreFoundation                      0x0000000106781039 -[NSException raise] + 9
    3   Foundation                          0x0000000106b984d3 -[NSObject(NSKeyValueCoding) setValue:forKey:] + 259
    4   CoreFoundation                      0x00000001066cb400 -[NSArray makeObjectsPerformSelector:] + 224
    5   UIKit                               0x00000001072ce97d -[UINib instantiateWithOwner:options:] + 1506
    6   UIKit                               0x000000010712f698 -[UIViewController _loadViewFromNibNamed:bundle:] + 242
    7   UIKit                               0x000000010712fc88 -[UIViewController loadView] + 109
    8   UIKit                               0x000000010712fef9 -[UIViewController loadViewIfRequired] + 75
    9   UIKit                               0x000000010713038e -[UIViewController view] + 27
    10  UIKit                               0x00000001076cd83f -[_UIFullscreenPresentationController _setPresentedViewController:] + 65
    11  UIKit                               0x000000010710bc49 -[UIPresentationController initWithPresentedViewController:presentingViewController:] + 105
    12  UIKit                               0x000000010713c121 -[UIViewController _presentViewController:withAnimationController:completion:] + 1746
    13  UIKit                               0x000000010713e461 __62-[UIViewController presentViewController:animated:completion:]_block_invoke + 132
    14  UIKit                               0x000000010713e385 -[UIViewController presentViewController:animated:completion:] + 229
    15  UIKit                               0x00000001073bb9d6 _UIGestureRecognizerSendActions + 262
    16  UIKit                               0x00000001073ba679 -[UIGestureRecognizer _updateGestureWithEvent:buttonEvent:] + 532
    17  UIKit                               0x00000001073bf296 ___UIGestureRecognizerUpdate_block_invoke662 + 51
    18  UIKit                               0x00000001073bf192 _UIGestureRecognizerRemoveObjectsFromArrayAndApplyBlocks + 254
    19  UIKit                               0x00000001073b520d _UIGestureRecognizerUpdate + 2796
    20  UIKit                               0x00000001070520a6 -[UIWindow _sendGesturesForEvent:] + 1041
    21  UIKit                               0x0000000107052cd3 -[UIWindow sendEvent:] + 667
    22  UIKit                               0x000000010701fae1 -[UIApplication sendEvent:] + 246
    23  UIKit                               0x000000010702cbad _UIApplicationHandleEventFromQueueEvent + 17370
    24  UIKit                               0x0000000107008233 _UIApplicationHandleEventQueue + 1961
    25  CoreFoundation                      0x00000001066b6ad1 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
    26  CoreFoundation                      0x00000001066ac99d __CFRunLoopDoSources0 + 269
    27  CoreFoundation                      0x00000001066abfd4 __CFRunLoopRun + 868
    28  CoreFoundation                      0x00000001066aba06 CFRunLoopRunSpecific + 470
    29  GraphicsServices                    0x000000010a1699f0 GSEventRunModal + 161
    30  UIKit                               0x000000010700b550 UIApplicationMain + 1282
    31  soundtest                           0x000000010624503e top_level_code + 78
    32  soundtest                           0x000000010624507a main + 42
    33  libdyld.dylib                       0x000000010ae4a145 start + 1
    34  ???                                 0x0000000000000001 0x0 + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
(lldb) 

【问题讨论】:

  • 您很可能在 NIB 中连接了一些不再存在的东西。看起来崩溃是当您尝试转换到的视图正在加载时。我会检查检查器窗格(右侧)中的所有插座并确保它们存在?如果您将按钮连接到不再存在(或已重命名)的 IBAction,也会发生这种情况
  • 没有什么没有被使用,它仍然给我错误。
  • 如果您将 Xcode 8 与 Swift 2.3 传统模式一起使用,请查看以下答案:stackoverflow.com/a/39548326/5175709
  • 一般来说,总是去控制台,点击cmmd + F,这样你就可以在控制台中搜索并搜索Terminating app due to uncaught exception,紧接着1行你会请参阅 reason:,它会告诉您应用崩溃的原因。 (是的,我遇到过这个错误太多次了:)
  • 在 Debug->Breakpoints 中创建 Exception Breakpoint 也很有帮助。然后,调试器应该有望停在问题所在的代码行上。

标签: ios swift


【解决方案1】:

在我的例子中,我调用了一个委托方法,但没有声明该方法。

此错误是一般性错误,可能由多种原因出现。确保您没有禁用日志以实际查看发生了什么。如果您已禁用它,请在方案中启用 OS_ACTIVITY_MODE。您可能已禁用它以防止出现大量不相关的日志,但它们很方便。

您还可以通过添加异常断点po $arg1 来更详细地跟踪原因。正如 Ahmed-Lotfi 已经提到的那样

这是您可以查看的常见清单。

2) Check if you have renamed an IBOutlet and calling it
3) Check if you have renamed a method name or the method doesn't exist
4) Check if you are trying to add or remove any view from hierarchy
5) Check for any missing framework or library
6) Check if you’ve forgot to register your custom cell identifier
7) Check for any missing flag in the Proejct Setting (-obj) or any other linker flag etc.

【讨论】:

  • 不错的清单!就我而言,我忘记了注册我的自定义单元格的标识符。可能值得将其添加到您的列表中,因为它可能是一件很容易忘记的简单事情。
【解决方案2】:

如果有人在expo eject 之后来到这里,那么以下步骤会有所帮助。

  1. 在您的终端中执行 expo start
  2. 转到 iOS/ 并使用 pod install 安装 pod
  3. 通过 Xcode 运行构建。

【讨论】:

    【解决方案3】:

    Xcode 11.2 的已知错误可能会导致此问题。 Xcode 11.2 已被弃用。

    下载 Xcode 11.2.1 解决了这个问题。

    Apple 11.2 Bug Forum

    我还将真实设备更新到当前的 iOS,但我认为这不是问题。

    【讨论】:

      【解决方案4】:

      如果您有一个表并且忘记将 UITableViewDelegate 和 UITableViewDataSource 分配给该类,则可能会发生这种情况

      【讨论】:

        【解决方案5】:

        如果您使用 react native 和 react-native-firebase,请确保链接 Google-Services.plist 文件 (https://github.com/invertase/react-native-firebase/issues/313#issuecomment-320435560)

        【讨论】:

          【解决方案6】:

          在 Xcode 9 和 Swift 4 中:

          打印异常堆栈以了解异常原因:

          1. 转到显示断点导航器。
          2. 添加 (+) 添加异常断点。

          3. 选择新断点,Control-Click,Edit Breakpoint。

          4. 添加操作并输入:po $arg1

          【讨论】:

          • 需要注意的是,Action 需要是一个“调试器命令”,因为在抛出异常时有多种选择可以采取什么样的 Action。但它真的帮助了我!谢谢!
          • 最佳答案!有时我在没有任何进一步信息的情况下在 pod 或 libs 深处得到了这个错误。几个月前我阅读了您的答案后,我多次使用它,每次都对我有帮助。
          • 这个答案应该指向“如何使 Xcode 调试器工作”
          • 绝对是最佳答案,对我帮助很大。
          【解决方案7】:

          您是否设置了 OS_ACTIVITY_MODE 变量? 要检查您是否设置了此变量(并将其关闭),请在 Xcode 9 中执行以下操作:

          Select from Xcode menu Product -> Scheme -> Edit Scheme.. Select the Run scheme and look under Arguments. If you see the OS_ACTIVITY_MODE variable checked, deselect it

          【讨论】:

          • 谢谢!我没有看到崩溃的原因:“无法识别的选择器发送到类”
          • 对不起,苹果。他们未修复的操作系统错误迫使我们打开它,然后我们错过了实际的重要调试消息。不错的收获,Siddhesh。
          • 谢谢,我之前添加了这个变量,忘了禁用它。你成功了!
          • 哇,谢谢,没有它,我永远不会发现我的 lil 错误。是的,Apple 为他们所有的错误滚动调试信息搞砸了
          • 确实如此。谢谢!
          【解决方案8】:

          还有一个可能的原因:

          就我而言,我有一个xib 并正在调用Bundle.main.loadNibNamed(...,此时它崩溃了。我所有的IBOutletsIBActions 看起来都很好。最后我注意到nib 实际上正在加载,但是当我尝试访问第一个(也是唯一一个)视图(nib.first)时,它不起作用。事实上nib.count 返回一个非常大的整数(最大整数?),而不是预期的1。我尝试重新添加视图,但仍然没有成功。

          最后,我删除了整个 xib 文件并重新开始(但我在剪贴板中保留了一些视图,因此我可以粘贴它们而不是重新创建它们)。

          成功了!

          【讨论】:

            【解决方案9】:

            我有两个问题:

            1) 我的目标没有包含在情节提要文件中使用的视图控制器。

            2) 我的故事板大约有 3 年的历史,我不得不从头开始在标签栏控制器中重新创建一个视图控制器(它只有一个 UITextField,我仍然不知道为什么它不起作用)

            【讨论】:

              【解决方案10】:

              在我的情况下,如果您使用UITableView,请不要忘记像这样在 viewcontroller 旁边添加 UITableViewDelegate 和 UITableViewDataSource。 class MenuController: UIViewController, UITableViewDelegate, UITableViewDataSource

              将旧项目(用 Swift 2.3 编写)转换为 Swift 3 时,需要添加这些关键字。

              【讨论】:

                【解决方案11】:

                当我在使用可视格式化程序构建约束时其中一个视图出现拼写错误时,我遇到了同样的错误。我希望这能帮助某人……或者有一天再次帮助我。

                【讨论】:

                  【解决方案12】:

                  在我的例子中,项目 Build Settings 包含一些不存在的目录,用于 Framework Search PathsLibrary Search Paths

                  【讨论】:

                    【解决方案13】:

                    它也可能是一个损坏的触发 Segue,检查你的故事板,一旦你重新连接 segues 或插座,它应该会再次工作。

                    确保 Segue 的 Identifier 正确且与您的代码相似。

                    【讨论】:

                      【解决方案14】:

                      就我而言,应用程序崩溃是因为我没有设置故事板的目标成员资格。

                      【讨论】:

                        【解决方案15】:

                        Swift 4

                        由于 UIVisualEffectView api 发生更改,我收到此错误。在 Swift 3 中可以这样做: myVisuallEffectView.addSubview(someSubview)

                        但在 Swift 4 中,我不得不将其更改为: myVisualEffectView.contentView.addSubview(someSubview)

                        【讨论】:

                          【解决方案16】:

                          在我的例子中,它是 InterfaceBuilder。我从另一个 ViewController 复制了一些视图,这弄乱了约束。

                          在 InterfaceBuilder 中,ViewController 上出现红色箭头错误。

                          在执行期间应用程序崩溃了。

                          【讨论】:

                            【解决方案17】:

                            对于 Swift 2.3

                            这似乎是 Xcode 8 和 Swift 2.3 的一个错误,如果您通过故事板将按钮操作连接到您的代码,请确保 Xcode 没有重命名该操作,对我来说它添加了一个 withSender: 在方法的末尾,所以我要做的是转到我的代码并重命名方法以匹配 Xcode 编写的方法。

                            对于任何其他版本,请检查正确答案。

                            【讨论】:

                              【解决方案18】:

                              我会将我的问题添加到可能的解决方案列表中,以防其他人遇到此线程。

                              TableView 单元格标识符。首先确保您的单元格具有标识符。其次,确保在出列单元格时引用该标识符。

                              【讨论】:

                                【解决方案19】:

                                我通过以下两种方式收到此错误:

                                我在推入另一个 UIViewController 时遇到此错误。

                                但是我错误地将另一个类从 UITabBarController 子类化并收到此错误。

                                我是如何解决的?我从UIViewController 继承,我不再崩溃:)


                                我不想使用故事板。所以我删除了它。但是我忘记在项目 settings 中删除它的引用。我只是点击了项目>>常规>>部署信息>>然后我将主界面设置为黑色空间。 (之前设置为 main)

                                正如您在这两种情况下看到的那样,您在访问某些确实存在的对象时遇到错误...

                                【讨论】:

                                  【解决方案20】:

                                  在我的情况下,由于断言失败(由我们的代码设置),XCode 感到疲倦并且无法使用此消息启动应用程序。

                                  在另一台设备上运行显示断言失败,我们能够修复,一切恢复正常。

                                  【讨论】:

                                    【解决方案21】:

                                    只有“放弃世界末日”解决方案对我有用:

                                    • 从设备中删除应用
                                    • 清理项目
                                    • 在设备上运行新安装

                                    【讨论】:

                                      【解决方案22】:

                                      对于我的情况,Xcode 8.2.1,我在视图控制器中有一个 Map Kit View。于是我去了

                                      构建阶段 > 将二进制文件与库链接

                                      并添加MapKit.framework,然后就可以了。

                                      我认为这也适用于其他需要框架的视图。

                                      附:在 iOS 9 上运行时告诉我 Map Kit View 存在问题,而在 iOS 10 上运行时什么也没告诉我!

                                      【讨论】:

                                        【解决方案23】:

                                        在我的例子中,它是 iPad 上的 UIAlertView: UIAlertController is Crashed (iPad)。我没有设置 sourceView 和 sourceRect。

                                        【讨论】:

                                          【解决方案24】:

                                          我的情况有点不同,我试图转入UINavigationController,但解决这个问题的方法是获得主队列部分。

                                          对于 Objective-C:

                                          dispatch_async(dispatch_get_main_queue(), ^{
                                              [self performSegueWithIdentifier:@"SegueName" sender:self];
                                          });
                                          

                                          对于 Swift 3:

                                          DispatchQueue.main.async { [weak self] in
                                              self?.performSegue(withIdentifier: "SegueName", sender: self)
                                          }
                                          

                                          【讨论】:

                                            【解决方案25】:

                                            其他解决方案对我不起作用,这是我的。它仅适用于在 Swift 2.3 旧模式下运行的 Xcode 8:

                                            看起来 Interface Builder 正在尝试重命名应该连接到按钮的方法。

                                            Here's a radar 了解更多详情。

                                            解决方法(workaround)是手动将方法参数名替换为_

                                            @IBAction func editPictureTapped(sender: UIButton) {  // not working
                                                print("Tapped")
                                            }
                                            

                                            改成这样:

                                            @IBAction func editPictureTapped(_: UIButton) {     // working OK
                                                print("Tapped")
                                            }
                                            

                                            【讨论】:

                                              【解决方案26】:

                                              对我来说,问题出在我的带有 UIButton 的 IBAction 中。

                                              当您 Ctrl+Drag 从 UIButton 创建 IBAction 时,请确保从 Type 下拉列表中选择“UIButton”。当您点击 UIButton 时,默认选择 AnyObject 会导致应用程序崩溃。

                                              【讨论】:

                                              • 我将 Action Type 设置为 AnyObject,但在我的情况下它不起作用。
                                              • 如果您阅读了我的帖子,我会指出 AnyObject 不起作用,正如您所发现的那样。
                                              【解决方案27】:

                                              确保您没有动态地将相对约束应用于视图层次结构中尚不存在的视图。

                                              UIView *bottomView = [[UIView alloc] initWithFrame:CGRectZero];
                                              [self.view addSubview:bottomView];
                                              
                                              bottomConstraint = [NSLayoutConstraint constraintWithItem:bottomView
                                                                                              attribute:NSLayoutAttributeBottom
                                                                                              relatedBy:NSLayoutRelationEqual
                                                                                                 toItem:self.view
                                                                                              attribute:NSLayoutAttributeBottom
                                                                                             multiplier:1
                                                                                               constant:0];
                                              bottomConstraint.active = YES;
                                              

                                              在上面的示例中,bottomView 在对其应用相对约束之前已成为视图层次结构的一部分。

                                              【讨论】:

                                                【解决方案28】:

                                                您的视图控制器中的按钮可能有超过 1 个 IBAction 尝试找出这些并删除控制器中该按钮的所有先前项目并创建新按钮。它将解决您的问题。

                                                【讨论】:

                                                  【解决方案29】:

                                                  这在 Xcode 7 上开始发生在我身上,我没有可以删除的带有黄色标志的插座。

                                                  唯一对我有用的是替换 AppDelegate 中的这一行:

                                                  [window addSubview:viewController.view];
                                                  

                                                  到:

                                                  [window setRootViewController:viewController];
                                                  

                                                  【讨论】:

                                                    【解决方案30】:

                                                    我是 Xcode 的新手,所以我花了几个小时才找出问题来加载 xls 文件。我跟踪了上面的大多数示例代码,但没有一个能解决显示的错误 Xcode。

                                                    我找到的解决方案是,当我们通过拖放到项目 -> 支持文件中将 xls 文件导入 Xcode 时,我们需要指定“添加到目标:”勾选要添加的项目。

                                                    【讨论】:

                                                      猜你喜欢
                                                      • 2018-12-11
                                                      • 1970-01-01
                                                      • 1970-01-01
                                                      • 2015-09-08
                                                      • 1970-01-01
                                                      • 1970-01-01
                                                      • 2014-10-04
                                                      • 2017-05-25
                                                      • 1970-01-01
                                                      相关资源
                                                      最近更新 更多