构建成功然后弹出“线程 1:信号 SIGABRT 错误”

Posted

技术标签:

【中文标题】构建成功然后弹出“线程 1:信号 SIGABRT 错误”【英文标题】:Building success then "Thread 1: signal SIGABRT error" pops up 【发布时间】:2016-07-28 17:53:04 【问题描述】:

我正在初步构建计算器。目前,代码除了在用户点击时将数字和 Pi 打印到计算器的标签中之外什么都不做。

1) 车码

import UIKit

class ViewController: UIViewController 

    @IBOutlet weak var display: UILabel! = nil

    var userIsInTheMiddleOfTypeing = false

    @IBAction func touchDigit(_ sender: UIButton)
        let digit = sender.currentTitle!
        if userIsInTheMiddleOfTypeing 
            let textCurrentlyInDisplay = display.text!
            display.text = textCurrentlyInDisplay + digit
         else 
            display.text = digit
        

        userIsInTheMiddleOfTypeing = true
    

    @IBAction func performOperation(_ sender: UIButton) 
        userIsInTheMiddleOfTypeing = false
        if let methematicalSymbol = sender.currentTitle 
            if methematicalSymbol == "π" 
                display.text = String(M_PI) // M_PI
            
        
          

2) 用户界面

touchDigit 功能链接到所有数字按钮,如下图所示。 displayUILableperformOperaton 是 PI 按钮

问题

当我构建代码时,Xcode首先告诉我构建成功,但是,我还没来得及做任何事情,就弹出了一个错误,如下所示

错误日志(从调试区复制)

2016-07-28 19:30:30.215343 Calculator[11671:208157] bundleid: com.Jeffery.Calculator, enable_level: 0, persist_level: 0, propagate_with_activity: 0
2016-07-28 19:30:30.218796 Calculator[11671:208157] Created DB, header sequence number = 260
2016-07-28 19:30:30.767300 Calculator[11671:208178] subsystem: com.apple.UIKit, category: HIDEvents, enable_level: 0, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 0, privacy_setting: 0
2016-07-28 19:30:31.022078 Calculator[11671:208157] Created DB, header sequence number = 260
2016-07-28 19:30:31.350380 Calculator[11671:208157] subsystem: com.apple.BaseBoard, category: MachPort, enable_level: 0, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 0, privacy_setting: 0
2016-07-28 19:30:31.388363 Calculator[11671:208159] subsystem: com.apple.FrontBoard, category: Common, enable_level: 0, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 0, privacy_setting: 0
libc++abi.dylib: terminating with uncaught exception of type NSException
(lldb) 

【问题讨论】:

也许可以从使用 if let 而不是 ! 开始。 @IBOutlet 弱变量显示:UILabel! = 无。为什么将其设置为零? 您在最有趣的部分截断了日志 :( 下一行是异常的描述,在大多数情况下,它会告诉您您需要知道的一切。此外,设置异常是值得的断点 - developer.apple.com/library/ios/recipes/… 如果问题已解决,请接受解决问题的答案,或发布您自己的答案。如果您有新问题,请发布一个新的、不同的 问题,但不要更改现有问题的含义。谢谢。 @EricD 好点,有道理。我会这样做的 【参考方案1】:

我认为这里有问题:'@IBOutlet weak var display: UILabel! = 无'。当您使用“显示”属性执行某些操作时,您尝试使用 nil 执行此操作。在声明属性后尝试删除'= nil'。或者你可以覆盖视图控制器的 init 方法,但对我来说,在这种情况下这是不好的方法。

【讨论】:

嗨,我认为这是一个很好的观点。我删除了 nil 设置,也就是只有 UILable!。但是错误仍然存​​在(顺便说一句,请原谅我迟到的回复)【参考方案2】:

我发现了我的错误,PI 按钮连接到 viewControler 有两个连接(我应该删除一个)。

【讨论】:

为了将来参考,这里提到了 NSException 被抛出。此异常对象将包含您需要阅读的有价值的信息。尝试在使用 Xcode 时添加this breakpoint 以在它被抛出时看到它。

以上是关于构建成功然后弹出“线程 1:信号 SIGABRT 错误”的主要内容,如果未能解决你的问题,请参考以下文章

XCode 错误线程 1:信号 SIGABRT

调用 requestLocation() 时的“线程 1:信号 Sigabrt”

Xcode 线程 1 SIGABRT 上的 Firebase 通知错误

线程 1:信号 SIGABRT,无法识别的选择器发送到实例

“线程 1:信号 SIGABRT”错误与 JSON 序列化

Xcode:“线程 1:信号 SIGABRT”