ストーリーボードに切り替えてから、ビューコントローラーを次の方法でロードします
[self performSegueWithIdentifier:@"identifier" sender:self]
これは完全に機能します。ここで、宛先ビュー コントローラーにプロパティを設定する場合は、メソッドを実装し、prepareForSegue:sender:
設定する必要があるプロパティを設定します。すべてが問題なく期待どおりに機能します。
古いものよりもこのアプローチを使い始めて以来
MyViewController *vc = ....
vc.prop = @"value";
[self.navigationController pushViewController:vc];
特に、設定しようとしている値が単なる静的な値ではない場合、パラメーターを宛先ビューコントローラーに渡すのは少しハックだと感じました。
たとえば、サーバーからデータを取得するボタンがあるとします。データが返されると、新しいオブジェクトが作成され、このオブジェクトを表示する新しいビュー コントローラーが提示されます。これを行うために を呼び出しますperformSegueWithIdentifier:sender:
が、それで終わりです。オブジェクトの割り当てが解除され、存在しなくなりprepareForSegue:sender:
ました。インスタンス変数に格納しない限り、オブジェクトをメソッドに渡す方法がありません。
オブジェクトはこのアクションよりも長く続くことを意図しておらず、現在のビュー コントローラーの他のものとは何の関係もないため、これはかなり恐ろしいことです。
この状況では、新しいView Controllerでデータを簡単にリクエストできることは理解していますが、これは単なる例です。
私の質問は、それほどハッキーに感じずにこれを行う別の方法はありますか? このデータをインスタンス変数に格納せずに、宛先のビュー コントローラーに入れることはできますか?
古いアプローチを引き続き使用できることはわかっていますが、できればストーリーボードの方法を使い続けたいと思います。