回答編集履歴
3
説明を捕捉しました
test
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
ChatVC().nav.title
|
2
2
|
|
3
|
-
のChatVC()でインスタンスを生成していますかね?その画面のインスタンスを
|
3
|
+
のChatVC()でインスタンスを生成していますかね?その画面のViewControllerのインスタンスをイニシャライザから生成しても残念ながらアウトレット navは自動的に生成、接続はされません。
|
4
4
|
|
5
5
|
したがってnavはnilとなりこのクラッシュが発生します。
|
6
6
|
|
@@ -11,3 +11,13 @@
|
|
11
11
|
|
12
12
|
|
13
13
|
delegateプロパティをchatVC型として扱えるようにしてそのnav.titleにDBの戻り値をセットすればうまくいくかもしれませんね。
|
14
|
+
|
15
|
+
|
16
|
+
|
17
|
+
※補足ですがStoryBoardで作った画面のVCをコードからインスタンス化する場合は下記メソッドでインスタンス化するのが一般的かと思います。
|
18
|
+
|
19
|
+
```Swift
|
20
|
+
|
21
|
+
let vc = storyboard.instantiateViewController(withIdentifier: "hogehoge")
|
22
|
+
|
23
|
+
```
|
2
コードをよく読んだらなんとなくわかりました
test
CHANGED
@@ -1,21 +1,13 @@
|
|
1
|
+
ChatVC().nav.title
|
2
|
+
|
1
|
-
画面
|
3
|
+
のChatVC()でインスタンスを生成していますかね?その画面のインスタンスをコードから生成しても残念ながらアウトレット navは自動的に生成、接続はされません。
|
4
|
+
|
5
|
+
したがってnavはnilとなりこのクラッシュが発生します。
|
2
6
|
|
3
7
|
|
4
8
|
|
5
|
-
前の画面からチャット画面への遷移はstoryboardのセグエですかね?
|
6
|
-
|
7
|
-
|
9
|
+
DBProviderクラスの役割分担が把握しきれておりませんが、chatVCのviewDidLoad内から呼び出されるメソッド内でもう一度chatVCを生成して値をセットするのは違和感があります。
|
8
|
-
|
9
|
-
このprepareの段階はインスタンスとして次のvcは生成されているが、アウトレットは接続されていない段階なのです。
|
10
10
|
|
11
11
|
|
12
12
|
|
13
|
-
この場合ですとprepareメソッド内からnavigation itemに直接的、間接的にアクセスが発生するとクラッシュが発生します。他のアウトレットがもしあるならそれも同様です。
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
13
|
+
delegateプロパティをchatVC型として扱えるようにしてそのnav.titleにDBの戻り値をセットすればうまくいくかもしれませんね。
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
prepare for segueではデータをアウトレットとは完全に無関係なプロパティに渡すにとどめ、遷移先のVCのViewDidLoad以降のタイミングでそのプロパティからアウトレットに値を反映するようにすることでこの現象は解決できます。
|
1
補足します
test
CHANGED
@@ -15,3 +15,7 @@
|
|
15
15
|
|
16
16
|
|
17
17
|
間接的というのは、値をセットするのは通常のプロパティでもそのプロパティをオブザーブしてアウトレットに値を反映的な処理をしているケースです。
|
18
|
+
|
19
|
+
|
20
|
+
|
21
|
+
prepare for segueではデータをアウトレットとは完全に無関係なプロパティに渡すにとどめ、遷移先のVCのViewDidLoad以降のタイミングでそのプロパティからアウトレットに値を反映するようにすることでこの現象は解決できます。
|