回答編集履歴
1
回答追加
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
|
+
```
|