あなたを助けるために時間と労力を費やしている人々をあざけるのは一般的にかなり悪い形です。
ネーミングは、コードの操作を容易にし、他の人が使用できるようにするために重要です。使用している言語の規則に従わないことは危険であり、解釈が異なるため、コードが他の開発者と互換性がないことを意味します。
UIViewControllerのドキュメントinitWithNibName:bundle:
を見ると、メソッドの説明にこのメモが表示されます。
アプリがストーリーボードを使用してビューコントローラーとそれに関連するビューを定義する場合、アプリはそのクラスのオブジェクトを直接初期化することはありません。代わりに、ビューコントローラーはストーリーボードによってインスタンス化されます。つまり、セグエがトリガーされたときにiOSによって自動的にインスタンス化されるか、アプリがストーリーボードオブジェクトのinstantiateViewControllerWithIdentifier:メソッドを呼び出したときにプログラムでインスタンス化されます。ストーリーボードからViewControllerをインスタンス化する場合、iOSは代わりにinitWithCoder:メソッドを呼び出して新しいViewControllerを初期化します。iOSは、nibNameプロパティをストーリーボード内に保存されているnibファイルに自動的に設定します。
したがって、コントローラーを間違ってインスタンス化しています。ストーリーボードがコントローラーをインスタンス化する必要があります。これはこのように行われます(名前が修正されました)
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:[NSBundle bundleForClass:[self class]]];
InfoViewController *infoViewController = [storyboard instantiateViewControllerWithIdentifier:@"InfoViewController"];
infoViewController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self infoViewController animated:YES];
サイドノート
infoView
大文字で始めなかっただけでなく、完全にだまされているため、クラスの悪い名前です。これを読んでいる人は誰でも、それがnotInfoView
のサブクラスであると想定します。UIView
UIViewController