ボタンを押すと例外がスローされます。そのボタンは、セグエ (ストーリーボードの一部) に関連付けられています。
*** Terminating app due to uncaught exception 'NSGenericException', reason: 'Could not find a navigation controller for segue 'changeRooms'. Push segues can only be used when the source controller is managed by an instance of UINavigationController.'
コール スタックは、例外がスローされた場所についてのヒントを提供しません。それを掘り下げようとしているときに、prepareForSegue 内で次のことを見つけました:
NSLog (@"navController1: %@", self.navigationController);
NSLog (@"navController2: %@", [[segue destinationViewController] navigationController]);
出力を作成します。
2013-02-16 15:41:57.201 Wohnungsprotokoll[1906:c07] navController1: (null)
2013-02-16 15:41:57.203 Wohnungsprotokoll[1906:c07] navController2: (null)
その段階で、destinationViewController にはまだ navigationController が割り当てられていないと予想していました。これが、他のView ControllerのprepareForSegue内のステータスと比較した理由です。それらはすべて同じ出力を生成します: (KeysEditVC.m - ここから ChooseRoomVC にセグされます)
NSLog (@"navControllerx: %@", self.navigationController);
NSLog (@"navControllery: %@", [[segue destinationViewController] navigationController]);
出力:
2013-02-16 15:41:52.181 Wohnungsprotokoll[1906:c07] navControllerx: <UINavigationController: 0xa22c5d0>
2013-02-16 15:41:52.182 Wohnungsprotokoll[1906:c07] navControllery: (null)
そこで、viewDidLoad (chooseRoomVC.m) 内の self.navigationController をチェックして、問題のあるビュー コントローラーへのセグエイングで何か問題が発生したかどうかを確認しました。しかし、それはよさそうです:
NSLog (@"navController0: %@", self.navigationController);
出力:
2013-02-16 15:41:52.212 Wohnungsprotokoll[1906:c07] navController0: <UINavigationController: 0xa22c5d0>
どうやら、ビュー コントローラー (chooseRoomVC.m) が実行されている間、どういうわけかどこかで navigationController の割り当てが失われます。同様の NSLogs を viewWillAppear と viewWillDisappear に追加し、どこでも self.navigationController が正しく設定されています。
コードやスクリーンショットなどを喜んで提供しますが、どこから始めればよいかわかりません。お知らせ下さい:
完全を期すために: OS-X 10.8.2 で xcode 4.6 を使用して、ストーリーボードと ARC、iOS 6.1、iOS シミュレーター、および iPhone デバイスを使用しています。
珍しいかもしれないことが1つだけあります。エラーがスローされたときに私がセグエしているView Controllerは、多くのView Controllerからセグエすることができます。しかし、私はこれ以上のものでそれを行っており、他のすべての場合にうまく機能します。