libc ++ abi.dylib:以类型为NSException(lldb)的未捕获异常终止


186

我正在快速编写一个应用程序,当我在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) 

8
您很可能已经在NIB中连接了不再存在的内容。看起来是当您尝试过渡到的视图被加载时的崩溃。我将检查检查器窗格(在右侧)中的所有出口,并确保它们都存在?如果您已将按钮连接到不再存在(或已重命名)的IBAction,也可能发生这种情况
cmyr 2014年

没有什么没有被使用,它仍然给我错误。
尼克

如果您在Swift 2.3旧版模式下使用Xcode 8,请查看以下答案: stackoverflow.com/a/39548326/5175709
Honey

6
通常,请始终进入控制台,然后单击,cmmd + F以便您可以在控制台内搜索并由于未捕获的异常而搜索终止应用程序,恰好在此之后的1行您会看到原因:这告诉您应用程序崩溃的原因。(是的,我有很多次这个错误了:)
亲爱的

1
在Debug-> Breakpoints中创建异常断点也可能会有帮助。然后,调试器应该希望在问题所在的代码行上停止。
查克·鲍里斯

Answers:


392

CMYR-“如果您将按钮连接到不再存在(或已重命名)的IBAction,也会发生这种情况”

如果遇到此问题,请确保转到Main.storyboard,右键单击电话轮廓顶部的黄色框图标(视图控制器),然后删除带有黄色标志的插座。

在这样的实例中发生的事情是您可能命名了一个动作,然后将其重命名。您需要删除旧名称,如果那是唯一的问题,它将直接在sim中启动!

enter image description here


9
好答案,谢谢!这是XCode的一个严重缺陷。错误处理需要大量开发。
HyperionX

3
我也遇到了黄色三角形的问题,但是仅修复这些三角形并不能解决我的崩溃问题。:(
Andrej

重命名@IBOutlet之后,这发生在我身上
Mohammed Fadhl '16

应该仔细检查以确保情节
提要

只是审查情节串连图板在连接督察的出口和动作的引用
阿尔瓦罗·阿圭罗

95

您是否有机会设置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


1
谢谢!我没有看到崩溃原因,因为:“无法识别的选择器发送给班级”
Denis Kutlubaev

14
真是悲哀,苹果。他们未修复的操作系统错误迫使我们打开它,然后我们错过了实际的重要调试消息。很好,Siddhesh。
Nate

谢谢,我在一段时间之前添加了此变量,却忘记了禁用它。你钉了!
罗德里戈·雷西奥

1
哇,谢谢,没有那我永远不会发现我的小虫子。是的,他们把所有错误的滚动调试信息
都给了

确实。谢谢!
Senocico Stelian

86

在Xcode 9和Swift 4中:

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

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

  3. 选择新的断点,按住Control键并单击“编辑断点”。

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

在此处输入图片说明


3
应当注意,该动作必须是“调试器命令”,因为对于引发异常要采取哪种动作有多种选择。但这确实帮助了我!谢谢!
Todd

最佳答案!有时,我在没有任何更多信息的情况下在pod或libs中深陷了此错误。几个月前阅读您的答案后,我使用了很多次,并且每次都对我有所帮助。
user8675

1
该答案应指向“如何使Xcode调试器工作”
Pier Giorgio Misley

绝对是最好的答案,它对我有很大帮助。
OkanKurtuluş

8

就我而言,我正在调用委托方法,但未声明该方法。

此错误是通用错误,可能由于多种原因而出现。确保您没有禁用日志以实际查看发生了什么。启用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.

1
不错的清单!就我而言,我忘记注册自定义单元的标识符。可能值得将其添加到列表中,因为它可能是一件很容易忘记的简单事情。
luismgb

7

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

看起来Interface Builder正在尝试重命名应该与按钮关联的方法。

这里有更多细节的雷达

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

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

更改为此:

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

5

Segue标识符名称也可能是错误的。例如-

performSegueWithIdentifier("wrongSegueName", sender: self)

4

我的情况有些不同,我正试图找出一个 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)
}

3

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

对我唯一有效的方法是在AppDelegate中替换此行:

[window addSubview:viewController.view];

至:

[window setRootViewController:viewController];

3

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

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

在此处输入图片说明


我已将操作类型设置为AnyObject,但就我而言,它不起作用。
Andrej

如果您阅读了我的文章,那么我认为您发现AnyObject不起作用。
克里斯·利夫达尔

3

这也可能是触发的Segues损坏,请在情节提要中检查一下,当您重新连接 Segues或插座时,所有这些都应重新工作。

检查Segues

确保IdentifierSegue的正确并与您的代码相似。

在此处输入图片说明


2

当我更改连接到我的一个按钮的变量的名称时,我遇到了这个问题。所以记住这一点!


2

我是Xcode的新手,所以花了几个小时才弄清楚问题,以便加载xls文件。我遵循了那里的大多数示例代码,但没有一个示例解决了所示的Xcode错误。

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


1

您的视图控制器中某个按钮可能有1个以上的IBAction,请尝试找出它们并删除控制器中该按钮的所有先前项,然后创建新按钮。这将解决您的问题。


1

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

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已成为视图层次结构的一部分。


1

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

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

但是我错误地将另一个类从 UITabBarController并得到了这个错误。

我如何解决它?我从继承而来UIViewController,不再崩溃:)


我不想使用情节提要。所以我删除了它。但是我忘记在项目设置中删除其引用。我只是单击项目>>常规>>部署信息>>,然后将主界面设置为黑色空间。(以前设置为main)

如您所见,在这两种情况下,您访问某个确实存在的对象时都会出现错误...


1

我将把我的问题添加到可能的解决方案列表中,以防其他人在此线程上发生任何事情。

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


1

斯威夫特4

由于UIVisualEffectView api中的更改,导致出现此错误。在Swift 3中可以这样做: myVisuallEffectView.addSubview(someSubview)

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


1

当我使用可视化格式器建立约束时,其中一个视图有错字时,我也遇到了同样的错误。我希望这能帮助某人...或者有一天能帮助我。




0

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

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

并添加MapKit.framework,那很好。

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

在iOS 9上运行的PS告诉我有关Map Kit View的问题,而在iOS 10上却什么也没有告诉我!



0

在我的情况下,由于断言失败(由我们的代码设置),导致XCode厌倦并无法通过此消息启动应用程序。

在另一台设备上运行表明存在断言失败,我们可以修复该断言失败,一切恢复正常。


0

对于Swift 2.3

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

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


0

就我而言,它是InterfaceBuilder。我从另一个ViewController复制了一些View,这弄乱了约束。

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

在执行过程中,应用程序崩溃了。


0

就我而言,该应用程序崩溃是因为我没有设置情节提要的目标成员身份。


0

在我的情况下,项目Build Settings包含了一些对非现有目录Framework Search PathsLibrary Search Paths


0

我有两个问题:

1)我的目标没有故事板文件中使用的视图控制器。

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


0

另一个可能的原因:

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

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

这工作了!


0

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.