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