回答編集履歴

1

回答追加

2019/12/22 15:09

投稿

TakeOne
TakeOne

スコア6299

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