質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.92%

Thread 1: signal SIGABRTの解決法

解決済

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 2,942

score 10

https://qiita.com/yanashi222/items/121b549852bedf391377
この記事にしたがって、全く同じコードを書き、アプリを作りました。
最初はきちんと動いていたのですが、その後で自分でボタンの色や形を変えたりして実験していると、Thread 1: signal SIGABRTというエラーが出てきてしまい、動かなくなってしまいました。

実際にこのエラーが出るのは、
プラスボタンを押し、画面を遷移させ、UITextViewに文字を打ち込んだ後、「書く!」ボタンを押した瞬間です。

エラーの理由(?)として、
libc++abi.dylib: terminating with uncaught exception of type NSException
という風に出ております。

エラーとその理由でGoogleで検索をかけた際は、解決策として、
黄色い三角の警告マークを無くすと解決、紐付けをやり直すと解決、の二つが出てきました。自分の場合、黄色い警告マークは出ていないのと、紐付けに関しても、Storyboardを使っている訳ではないので、紐付けをやり直すと解決、という方法も違うように思います。このエラーの解決法を知っている方がいれば、教えていただきたいです。

どうしようもなくなってしまい、質問させていただきました。初心者の質問で至らないところもあるとは思いますが、御教授のほど、どうぞよろしくお願い致します。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

checkベストアンサー

+3

調べ方を間違えているので、調べ方を説明します。

Thread 1: signal SIGABRTlibc++abi.dylib: terminating with uncaught exception of type NSExceptionは、エラーの理由を示すメッセージではありません。単にアプリがエラーで停止したという結果を表示しているだけあり、Storyboardの紐付けに問題があることを意味しているものではありません。

エラーの理由は、デバッグエリアのコンソールメッセージにlibc++abi.dylib: terminating with uncaught exception of type NSExceptionと表示されている前後の reason:に続く部分に書かれています。それを見てエラーの原因を調べる必要があります。Webを検索してエラーの原因を調べるならreason:に続く部分を検索する必要があります。自分で解決できなくてteratailで質問する時もreason:に続く部分を示して質問しないと的確な回答は得られません。


(12/23追記)

reason:'Invalid value '(null)' of type '(null)' for 'string' property 'Event.date'と出ているのであれば、EventクラスのdateプロパティがString型なのに、そこにnilを代入しようとしたということだと思います。

「Event.dateというコードを書いていない」と言われていますが、記事を見ると、Realmのモデルクラスとして、Eventクラスのdateプロパティが定義されており、「書く!」ボタンを押した時に呼ばれるEventViewControllerのsaveEventメソッドの中で、次のような書き込み処理が行われています。

try! realm.write {
    //日付表示の内容とスケジュール入力の内容が書き込まれる。
    let Events = [Event(value: ["date": y_text.text, "event": eventText.text])]
    realm.add(Events)
    print("データ書き込み中")
}


おそらく
let Events = [Event(value: ["date": y_text.text, "event": eventText.text])]
の処理でEventクラスのdateプロパティに設定しようとしている y_text.textがnilだったためエラーが発生したのだろうと推測できます。

そこで、元々の記事に問題があるのか、この記事通りに実装できていないのか切り分けるために、私の方でも記事通りのものを作ってみました。すると、あっさりと同じエラーが再現し、上記のエラー時点でy_text.textがnilになっていることを確認しました。元々の記事に問題があるようです。

どうしてy_text.textがnilのままなのか確認するために、y_text.textに値を設定している場所を探したところ、pickerメソッドの中で設定されていましたが、このメソッドはUIDatePickerを操作して日付を変更した時に呼ばれるメソッドです。この場合UIDatePickerを操作しないで「書く!」ボタンをタップするとy_text.textに何も文字が設定されていないまま(nilのまま)書き込み処理が行われるため、今のエラーが発生します。ちなみに、UIDatePickerを操作してから「書く!」ボタンをタップすると正常に動作することも確認しました。

UIDatePickerを操作しないまま「書く!」ボタンをタップしても正常に動作するようにしたいなら、EventViewControllerのviewDidLoadメソッドの最後に次の処理を追加しておけば、y_text.textがnilのままということにならず、とりあえず動作するようになると思います。

let formatter = DateFormatter()
formatter.dateFormat = "yyyy/MM/dd"
y_text.text = formatter.string(from: y.date)

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/12/24 18:06

    エラーが消えて思う通りに動くようになりました。分かりやすい説明で助かりました。ありがとうございました。

    キャンセル

  • 2020/11/03 17:35

    横から失礼します。
    同じく元記事を参考にアプリを作っているのですが、スケジュール欄を空の状態で「書く!」ボタンをタップすると同様のエラーになるのですが、対処法ありますでしょうか?

    キャンセル

  • 2020/11/04 23:16

    この回答に書いてある対処法をやっても同じエラーが出るのだったら元々の記事の通りに作れていないのだと思います。解決できないのだったら人の質問に横から便乗せず、自分がやったことと起きた現象を新しい質問できちんと説明して質問すべきだと思います。

    キャンセル

+1

まずは、どの行でその例外が出るのかを特定しましょう。
要所にブレークポイントを設定して、どこまで実行できているか、どこからダメなのかをチェックしていけば、例外の出る行が特定できると思います
それが判明したならば、その周辺のコードとともに提示して聞いていただければ、解決は早いかと思います

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/12/22 12:33

    ご指摘ありがとうございます。ブレークポイントに慣れていないので、やり方を勉強してみたいと思います。また判明したら追記したいと思います。

    キャンセル

+1

このチュートリアル確認しました。無事にビルドできました。

  1. Storyboardは使われています。
  2. 考えられるのは、以下のステップをミスしたかもしれません。 

そして、各StoryBoard IDを以下の様にする。
ViewController -> Main
EventViewController -> Insert

できた画面:
イメージ説明
イメージ説明

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/12/22 08:14

    実証していただいてありがたい限りです。一応Story Board IDの設定は済ましてある状況です。そこの設定がエラーの原因だとするならば、一度設定をやり直すという形でいいのでしょうか?一度、そこのところを設定し直してみたのですが、どうもうまくいかないので、やり方が間違っているのかなと思います。指南いただけると幸いです。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.92%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る