明らかにnilじゃないのに「unexpectedly found nil〜」が出る

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る
Swift

Swiftをいじっているとかなりの頻度で出くわす「fatal error: unexpectedly found nil while unwrapping an Optional value」というエラー。

理屈も解決法もわかっているつもりでも、時に思わぬところでハマってしまうことがある。

どう見てもnilじゃないのにnilで落ちる?

筆者が2時間近くハマった出来事。

UIImageViewに画像を設定する処理を以下のコードで実装していた。

しかし、実行してみるとこの行で「unexpectedly found nil」のエラー。

てっきり「setImageがnilなのかな??」と思って調べてみるが、setImageには明らかにnilでない値が入っている。なんでや!

nilなのは値じゃなくて変数だった

気付いてしまえばとても恥ずかしい話なのだが、nilなのはimageViewの方だった。

発見が遅れてしまった理由は、ビューコントローラーの名前を変えたりしているうちにアウトレット接続が失われてしまい、imageViewそのものがnilになってしまったこと。
普通はアウトレット接続してしまえばnilになるなんてことは起こらないので、なかなか気付くことができなかった。

というか、そもそも入れようとする値がnilだとしても、代入する行で「unexpectedly found nil」で落ちることはありえない。
このエラーが出るのは「nilを入れようとしたから」ではなく「nilのまま使おうとしたから」だ。

基礎がなってないなあ、と反省。

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

SNSでもご購読できます。