【teratail】Labelに文字列を代入するコードでThread1: Fatal errorが発生
質問
実現したいこと
下記のセルをタップしたら、
・2つのラベルテキスト
・曲のアイコン画像
を、
次画面の
・Label
・ImageView
に渡したい。
困っていること
次画面へ遷移する際の処理を記述するprepareメソッドの
playvc.songnameLabel.text = “a”
(playvcとは次画面のインスタンス)
で、
Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value
が発生してしまう。
label.textがnilが原因だと思い、次画面で紐付けしたlabel.textにviewDidLoad()で値を代入してもダメ。
解決方法
prepareは遷移する際に処理されるメソッドなので、prepareを通過した時にはまだ次画面のlabelは生成されていない。
言い換えると、viewが生成されてない。
方法は2つ。
1つは、次画面でテキストを受け取る変数を宣言しておくこと。
例えば、
var labelText = “”
と宣言し、viewDidLoad()で
playvc.labelText = labelText
と記述すればいい。
そもそも次画面で紐付けされるlabelに直接値を代入するのは無理だった。
2つ目は、prepare内に
_ = playvc.view
と記述すればいい。
viewが生成すれば、次画面のlabelにアクセスできる。
しかし、なんやかんやの理由で、1つめの方法が望ましい。
結論として、画面を超えた値の受け渡しは、受け取るがわに変数を用意しておく必要がある。