調べ方を間違えているので、調べ方を説明します。
Thread 1: signal SIGABRT
やlibc++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メソッドの中で、次のような書き込み処理が行われています。
swift
1try! realm.write {
2 //日付表示の内容とスケジュール入力の内容が書き込まれる。
3 let Events = [Event(value: ["date": y_text.text, "event": eventText.text])]
4 realm.add(Events)
5 print("データ書き込み中")
6}
おそらく
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のままということにならず、とりあえず動作するようになると思います。
swift
1let formatter = DateFormatter()
2formatter.dateFormat = "yyyy/MM/dd"
3y_text.text = formatter.string(from: y.date)
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/22 03:35 編集
2019/12/22 15:09
2019/12/23 11:31
2019/12/24 09:06
2020/11/03 08:35
2020/11/04 14:16