質問: _objects[indexPath.row]; [[segue destinationViewController] setDetailItem:img]; } } ``` 画面 A から画面 B に遷移させる内容を実装すると、なぜかそれまでは上手くいっていたはずの、 画面 B から画面 A への遷移がエラーになってしまいます。 エラーメッセージは以下の通りです。 > > Terminating app due to uncaught exception 'NSGenericException', reason: 'Could not find a navigation controller for segue 'showDetail'. Push segues can only be used when the source controller is managed by an instance of UINavigationController.' > > > どう対処すれば良いか、どなたかご教示いただけないでしょうか。 以上、何卒よろしくお願いいたします。
回答: エラーメッセージが教えてくれること、そのものです。すなわち`UINavigationController`が運営(Manage)している環境でなければ、`push segues`ができないのだから、`UINavigationController`を作ってやればいいのです。 !画像の説明をここに入力 XcodeのStoryboardで、ルートになるView Controllerを選択して、Editorメニュー>Embed In>Navigation Controllerで、UINavigationControllerが作られます。 しかし、 > > 二つの画面をお互いに Segue でループさせること > > > というのは、むだにメモリを消費して、最悪アプリを落とすことにしかなりませんので、するべきではありません。外見は、「互いの画面を行ったり来たり」しているように見えますが、じっさいは、View Controller Aの上に、View Controller Bがのっかり、その上にView Controller Aがのっかるという、スタックが形成されていきます。モーダルで遷移したViewControllerは、`dismiss`で前のViewControllerに戻ること。Navigation Controllerで遷移した場合は、`pop`するか、`Unwind Segue`するかして、戻ることです。「戻る」という処理をすることで、遷移前のViewConttollerは、メモリから解放され、メモリを圧迫する要因ではなくなります。 さて、あなたが書いたプログラムを詳細に見ていきます。 ``` [self presentModalViewController:controller animated:YES]; //モーダルで呼び出す ``` `presentModalViewController:animated:`は、iOS 6にて**Deprecated**されているので、使うべきではありません。代わりに`presentViewController:animated:completion:`を使ってください。 モーダルで遷移したViewControllerから「戻る」には、dismiss〜か、`Unwind Segue`を使います。`Unwind Segue`は、これをキーワードにしてネット検索すれば、ていねいな説明をしているブログがヒットしますので、それで勉強してください。なお、くれぐれもそのドキュメントが書かれた日付は、かならずチェックしてください。あまりに古い情報はそのまま受け取らないほうがいいです。