0

ボタンを押すと例外がスローされます。そのボタンは、セグエ (ストーリーボードの一部) に関連付けられています。

*** 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からセグエすることができます。しかし、私はこれ以上のものでそれを行っており、他のすべての場合にうまく機能します。

4

1 に答える 1

0

それを突き止め、質問のためにすべてをまとめるのに何年もかかった後、今、私はそれを見つけました。

IB では、このセグエに関連付けられたボタンを同じビューの別のボタンからコピーしました。そして、このオリジナルからのコピーから、アクションの割り当てが残っていました。別のボタンに関連付けられるはずだったこの IBAction メソッドは、いくつかのビジネス ロジックを実行して呼び出されました。

[self.navigationController popViewControllerAnimated:YES];

したがって、私はさらに下に移動し、ほぼ同時に親View Controllerに戻りました! 当然、それは機能しません。ただし、同じ問題を抱えている人が根本的な原因を私よりも早く見つけられるように、ここに残しておきます。

于 2013-02-16T15:28:17.160 に答える