teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

回答追加

2019/12/22 15:09

投稿

TakeOne
TakeOne

スコア6299

answer CHANGED
@@ -2,4 +2,33 @@
2
2
 
3
3
  `Thread 1: signal SIGABRT`や`libc++abi.dylib: terminating with uncaught exception of type NSException`は、エラーの理由を示すメッセージではありません。単にアプリがエラーで停止したという結果を表示しているだけあり、Storyboardの紐付けに問題があることを意味しているものではありません。
4
4
 
5
- エラーの理由は、デバッグエリアのコンソールメッセージに`libc++abi.dylib: terminating with uncaught exception of type NSException`と表示されている前後の `reason:`に続く部分に書かれています。それを見てエラーの原因を調べる必要があります。Webを検索してエラーの原因を調べるなら`reason:`に続く部分を検索する必要があります。自分で解決できなくてteratailで質問する時も`reason:`に続く部分を示して質問しないと的確な回答は得られません。
5
+ エラーの理由は、デバッグエリアのコンソールメッセージに`libc++abi.dylib: terminating with uncaught exception of type NSException`と表示されている前後の `reason:`に続く部分に書かれています。それを見てエラーの原因を調べる必要があります。Webを検索してエラーの原因を調べるなら`reason:`に続く部分を検索する必要があります。自分で解決できなくてteratailで質問する時も`reason:`に続く部分を示して質問しないと的確な回答は得られません。
6
+
7
+ ---
8
+ (12/23追記)
9
+
10
+ `reason:`に`'Invalid value '(null)' of type '(null)' for 'string' property 'Event.date'`と出ているのであれば、EventクラスのdateプロパティがString型なのに、そこにnilを代入しようとしたということだと思います。
11
+
12
+ 「Event.dateというコードを書いていない」と言われていますが、記事を見ると、Realmのモデルクラスとして、Eventクラスのdateプロパティが定義されており、「書く!」ボタンを押した時に呼ばれるEventViewControllerのsaveEventメソッドの中で、次のような書き込み処理が行われています。
13
+ ```swift
14
+ try! realm.write {
15
+ //日付表示の内容とスケジュール入力の内容が書き込まれる。
16
+ let Events = [Event(value: ["date": y_text.text, "event": eventText.text])]
17
+ realm.add(Events)
18
+ print("データ書き込み中")
19
+ }
20
+ ```
21
+ おそらく
22
+ `let Events = [Event(value: ["date": y_text.text, "event": eventText.text])]`
23
+ の処理でEventクラスのdateプロパティに設定しようとしている `y_text.text`がnilだったためエラーが発生したのだろうと推測できます。
24
+
25
+ そこで、元々の記事に問題があるのか、この記事通りに実装できていないのか切り分けるために、私の方でも記事通りのものを作ってみました。すると、あっさりと同じエラーが再現し、上記のエラー時点で`y_text.text`がnilになっていることを確認しました。元々の記事に問題があるようです。
26
+
27
+ どうして`y_text.text`がnilのままなのか確認するために、`y_text.text`に値を設定している場所を探したところ、pickerメソッドの中で設定されていましたが、このメソッドはUIDatePickerを操作して日付を変更した時に呼ばれるメソッドです。この場合UIDatePickerを操作しないで「書く!」ボタンをタップすると`y_text.text`に何も文字が設定されていないまま(nilのまま)書き込み処理が行われるため、今のエラーが発生します。ちなみに、UIDatePickerを操作してから「書く!」ボタンをタップすると正常に動作することも確認しました。
28
+
29
+ UIDatePickerを操作しないまま「書く!」ボタンをタップしても正常に動作するようにしたいなら、EventViewControllerのviewDidLoadメソッドの最後に次の処理を追加しておけば、`y_text.text`がnilのままということにならず、とりあえず動作するようになると思います。
30
+ ```swift
31
+ let formatter = DateFormatter()
32
+ formatter.dateFormat = "yyyy/MM/dd"
33
+ y_text.text = formatter.string(from: y.date)
34
+ ```