Swift错误:信号SIGABRT如何解决它

时间:2017-04-21 15:23:54

标签: ios swift

我只是Swift编码的初学者。我的想法很简单,这是一个带有两个按钮的应用程序。单击时,文本字段将更改其文本。 在Main.StoryBoard中,我添加了一个文本字段和两个按钮。 在ViewController.swift文件中。我这样写:

import UIKit

class ViewController: UIViewController {
    @IBOutlet weak var textfield: UITextField!
    @IBOutlet weak var button: UIButton!
    @IBOutlet weak var button2: UIButton!

    @IBAction func action1(_ sender: UIButton) {
        textfield.text="you just clicked on button1"
    }
    @IBAction func action2(_ sender: UIButton) {
        textfield.text="you just clicked on button2"
    }
}

应该可以。但是,会出现一个错误,显示:

  

thread1:信号SIGABRT

在AppDelegate.swift文件行中:

class AppDelegate: UIResponder, UIApplicationDelegate

我的代码出了什么问题?

13 个答案:

答案 0 :(得分:63)

每当断开插座时,都会收到SIGABRT错误。单击故事板中的视图控制器,然后转到侧面板中的连接(箭头符号)。看看你是否有一个额外的插座,一个副本,或一个没有连接的额外插座。如果不是那样,那么您可能无法正确地将您的插座连接到您的代码。

请记住,当您尝试拨打不在那里的插座(按钮,视图,文本字段等)时会发生SIGABRT。

答案 1 :(得分:27)

对我而言,这不是一个出路。我通过转错来解决问题并阅读它所说的内容。 (还有Noob ..)

这是错误:

enter image description here

解决方案在这里: enter image description here

只需在输出中向上滚动,就会显示错误。

答案 2 :(得分:22)

我通过清理项目和重建来解决问题。

要清理项目,请转到 MenuBar:Product - >清洁

然后重建只需像往常一样单击“运行”按钮

答案 3 :(得分:8)

此类错误的常见原因是您可能更改了IBOutlet或IBAction的名称,您可以通过转到源代码来查看。

点击 main.storyboard ,然后选择打开 然后选择源代码 enter image description here

源代码将会打开

然后检查是否有您已更改的iboutlet或ibaction的名称,如果有,则选择该部件并将其删除,然后再次创建iboutlet或ibaction。 这应该可以解决您的问题

答案 4 :(得分:5)

就我而言,我并没有因为AppDelegate中的崩溃而出错,而是不得不取消选择下一个选项:OS_ACTIVITY_MODE,然后我才能在我的.xib文件中得到真正的崩溃原因

enter image description here

希望这也可以为您提供帮助:)

答案 5 :(得分:4)

我遇到了同样的问题。我在故事板中创建了一个按钮并将其连接到ViewController,然后删除了按钮。所以连接仍然存在,但按钮不是,所以我得到了和你一样的错误。

要修复:

转到连接检查器(右上角的箭头,在故事板中),然后删除所有未使用的连接。

答案 6 :(得分:3)

如果您在Xcode 10中遇到此问题,则必须在构建之前进行清理。或者,切换到旧版构建系统。文件->工作区设置...->构建系统:旧版构建系统。

答案 7 :(得分:2)

这是一个非常常见的错误,可能由于多种原因而发生。最常见的是从快速文件中但未从情节提要中删除连接到情节提要中的视图控制器的IBOUTLET / IBACTION的情况。如果不是这种情况,请使用底部工具栏中的日志来找出错误并进行诊断。您可以使用断点和调试来帮助您查找错误。

要了解如何解决该错误,请使用我在Google上找到的这篇文章:https://rayaans.com/fixing-the-notorious-sigabrt-error-in-xcode

答案 8 :(得分:0)

就我而言,没有任何日志。

我的错误是将视图控制器推入已经属于导航堆栈的导航堆栈中。

答案 9 :(得分:0)

有时在仅需要在主线程中执行该函数时也会发生这种情况,因此可以通过如下所示将其分配给主线程来对其进行修复:-

DispatchQueue.main.async{
  your code here
}

答案 10 :(得分:0)

对我来说,此错误是因为我有一个准备好的搜索步骤,不适用于正在执行的搜索。

长话:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

        let gosetup = segue.destination as! Update
        gosetup.wherefrom = updatestring

    }

这是针对所有segue的,仅用于一次。因此,我创建了一个布尔值并将gosetup放在其中。

答案 11 :(得分:0)

就我而言,我使用RxSwift执行搜索。

我一直在onNext方法中广泛使用特定类的共享实例,这可能使其无法访问(Mutex)。

确保仅在绝对必要时才小心处理此类实例。

在我的情况下,我事先使用了几个变量来安全地(顺序地)存储共享实例方法的返回值,并在onNext块内重用它们。

答案 12 :(得分:0)

我有同样的问题。就我而言,我只是覆盖了文件

GoogleService-Info.plist

在该路径上:

Platform\ios\YOUR_APP_NAME\Resources\Resources

在我看来,这些文件没有数据。