iOSアプリのunrecognized selector sent to instanceエラーについて


iOSアプリのunrecognized selector sent to instance エラーについて

はじめに

ダイアログを表示する画面を作成していた時にunrecognized selector sent to instanceのエラーが起こり四苦八苦したのでメモとして残します。

TL;DR

結局StoryBoardに設定するCustom Classのクラスが違うクラスを指定していたことが原因というオチ。。。

経緯

こんな感じでViewControllerを呼び出してダイアログ表示をしようとしていたが、タイトルのエラーが起こりうまく行かなかった。クラスが原因かと思い色々見直したがアクセスはできるし、原因が謎だった(そもそも筆者がObjective-C、iOS開発あまり知らない人でてんやわんや)

// 指定のViewControllerインスタンスを作成、その際に
HogeDialogViewController *vc = [
    [UIStoryboard storyboardWithName:@"HogeDialogViewController" bundle:nil] 
     instantiateViewControllerWithIdentifier:@"HogeDialogViewController"];
// Dictionary型を作成し、Entityを作成する
NSDictionary *responseObject = [NSDictionary dictionaryWithObjectsAndKeys:
        @"id", @1111,
        nil];
HogeData *hogeData = [[HogeData alloc] initWithDictionary:responseObject];
vc.hogeData = hogeData;
// Dialog表示
[vc show];

StoryBoardを見直す

コードは問題ないと考え、StoryBoardを見直したところ、Custom Classのクラス名が違うクラスを指定していたからViewControllerにインスタンスをセットできないよと怒られていたようです。

所感

よくよく考えてみたら存在しないStoryBoardを指定してそのインスタンスの存在しないフィールドにアクセスしようとしてたんだから、そりゃ怒られるよねっていう話。iOS開発大変だなぁと思った。ていうかObjective-cじゃなくてSwift触りてえ。

参考情報