【Swift】「Thread 1: signal SIGABRT」エラーが出るときの原因
IT技術
「Thread 1: signal SIGABRT」は簡単に解決できます!
Swift(スウィフト)の基本も身に付き、エラーも解決できるようになってきた頃に現れるのが「Thread 1: signal SIGABRT」エラーです。
大体のエラーは、横に原因が書いてあるので、書いてある通りにコードを修正すれば解決できます。
「Thread 1: signal SIGABRT」は、これ以外何も書いておらず、一体何がいけないのかさっぱりですよね。
ですが、「Thread 1: signal SIGABRT」は、原因さえ分かれば簡単に解決できるんです!
今回は、「Thread 1: signal SIGABRT」エラーの発生原因の一つである、ストーリーボードの接続が正しく出来ていない場合について説明していきます。
「Thread 1: signal SIGABRT」とは?
このエラーが起こるのは、ほとんどの場合、ストーリーボードが正しく接続されていないときです。
ボタンをタップしたときや、ビルドして画面が反映される前などに強制終了してしまうことがよくあります。
このエラーが厄介なのは、原因が特定しづらいことで、今から解説する原因ではない可能性もあります。
解説するにあたり、プログラムは「シンプルな ToDo リストアプリ」を使用していきます。
アプリの内容は、右上のナビゲーションアイテムをタップすると、アラートが表示されて ToDo にリストを追加できるアプリです。
シンプルなプログラムですが、原因が同じであれば、応用が効くのでご安心ください。
【※注意※】
コードの例では、原因の部分だけを書いて説明していきますので、実際の処理の内容はここでは書きません。ご了承ください。
ビルドした瞬間に「Thread 1: signal SIGABRT」
初めに、ビルドした瞬間に「Thread 1: signal SIGABRT」エラーが出てくるパターンを解説していきます。
まずは、普通に実装していきましょう。
コードその1
次のコードをビルドします。
1class ViewController: UIViewController,UITableViewDataSource,UITableViewDelegate{
2 var todoList = [MyTodo]()
3
4 @IBOutlet weak var tableView: UITableView!
5 // 〜以下省略
6
7 @IBAction func Add Button(_ sender: Any) {
8 // 他の処理は省略しています。
9 self.tableView.insertRows(at: [IndexPath(row: 0, section: 0)],
10 with: UITableView.RowAnimation.right)
11 // 〜以下省略
12 }
13 }
ビルドした結果
成功しました。
コードその2
次に、一番上の変数と @IBOutlet を入れ替えてみましょう。
1class ViewController: UIViewController,UITableViewDataSource,UITableViewDelegate{
2 @IBOutlet weak var tablView: UITableView!
3
4 var todoList = [MyTodo]()
5 // 〜以下省略
6
7 @IBAction func Add Button(_ sender: Any) {
8 // 他の処理は省略しています。
9 self.tableView.insertRows(at: [IndexPath(row: 0, section: 0)],
10 with: UITableView.RowAnimation.right)
11 // 〜以下省略
12 }
13 }
ビルドを実行しましたが、@IBOutlet が tablView になっているため、ビルドできませんでした。
コードその3
次のように、tablView を tableView に修正し、ビルドしてみましょう。
1class ViewController: UIViewController,UITableViewDataSource,UITableViewDelegate{
2 @IBOutlet weak var tableView: UITableView!
3
4 var todoList = [MyTodo]()
5 // 〜以下省略
6
7 @IBAction func Add Button(_ sender: Any) {
8 // 他の処理は省略しています。
9 self.tableView.insertRows(at: [IndexPath(row: 0, section: 0)],
10 with: UITableView.RowAnimation.right)
11 // 〜以下省略
12 }
13 }
ビルドした結果
「Thread 1: signal SIGABRT」エラーが出てしまいました!
なぜでしょう?
実は、間違えた name で一度ビルドしてしまうと、コード上で修正するだけではビルドできず、ストーリーボード上でも接続を切らなければいけません。
実際に確かめてみると、接続が複数になっていることが確認できます。
そのため、ストーリーボード上の接続を全て切ってから、新たに正しい name で接続すれば、ビルドは成功するでしょう。
まだわからない人もいるかと思いますので、次は画像と共に解説していきます。
上記の説明を画像で解説
「Thread 1: signal SIGABRT」エラーが出ている状態では、ストーリーボード上の接続は、次のようになります。
「Referencing Outlets」で間違えた方の name を削除します。
これでビルドすると、「Thread 1: signal SIGABRT」エラーが出ることなく、立ち上げることができます。
ボタンを押したら「Thread 1: signal SIGABRT」
次は、ボタンを押した瞬間に「Thread 1: signal SIGABRT」エラーが出る原因について説明します。
まず、普通にボタンを押してみます。
1 @IBAction func AddButton(_ sender: Any) {
2 // 〜省略
3}
ビルドした結果
アラートダイアログが表示されたので成功です。
name を変更したコード
次は、AddButton を addButton へと変更したコードです。
1@IBAction func addButton(_ sender: Any) {
2 }
このコードでは、「Thread 1: signal SIGABRT」エラーが出ました。
@IBAction の name をコード上で、勝手に編集してしまったのが理由です。
name を編集したい場合は、一度、ストーリーボード上からも削除しなければいけません。
さいごに
「Thread 1: signal SIGABRT」エラーが出てしまった場合は、どこでエラーが出ているのかを確かめ、その部分の接続を一旦切ってみると良いでしょう。
それでも解決できない場合は、理由が書いていますので、デバックエリアを確認してみましょう。
解説した原因以外にも、「Thread 1: signal SIGABRT」が出る原因はあるそうですが、私は遭遇したことがありません。
最後に、今回のまとめです。
- 「Thread 1: signal SIGABRT」が出たらまずは接続を疑う。
- 接続の name を変える場合は、一旦接続からやり直す。
この2つを気をつけておけば、大丈夫です。
ぜひ活用してみてください!
こちらの記事もオススメ!
2020.08.14スマホ技術 特集Android開発Android開発をJavaからKotlinへ変えていくためのお勉強DelegatedPropert...
2020.07.17ライトコード的「やってみた!」シリーズ「やってみた!」を集めました!(株)ライトコードが今まで作ってきた「やってみた!」記事を集めてみました!※作成日が新し...
ライトコードでは、エンジニアを積極採用中!
ライトコードでは、エンジニアを積極採用しています!社長と一杯しながらお話しする機会もご用意しております。そのほかカジュアル面談等もございますので、くわしくは採用情報をご確認ください。
採用情報へ
「好きを仕事にするエンジニア集団」の(株)ライトコードです! ライトコードは、福岡、東京、大阪の3拠点で事業展開するIT企業です。 現在は、国内を代表する大手IT企業を取引先にもち、ITシステムの受託事業が中心。 いずれも直取引で、月間PV数1億を超えるWebサービスのシステム開発・運営、インフラの構築・運用に携わっています。 システム開発依頼・お見積もり大歓迎! また、現在「WEBエンジニア」「モバイルエンジニア」「営業」「WEBデザイナー」「WEBディレクター」を積極採用中です! インターンや新卒採用も行っております。 以下よりご応募をお待ちしております! https://rightcode.co.jp/recruit