web-dev-qa-db-ja.com

NSGenericException '、理由:'プッシュセグエは、ソースコントローラーがUINavigationControllerのインスタンスによって管理されている場合にのみ使用できます

だから私は5つのView Controllerでアプリを作っています。最初のView ControllerはUINavigationControllerに埋め込まれており、最初の4つのView Controller間のセグエはうまく機能します。ただし、5番目のView Controllerを導入するとこれが壊れ、エラーが発生します

Terminating app due to uncaught exception 'NSGenericException', reason: 'Push segues can only be used when the source controller is managed by an instance of UINavigationController.'

この5番目のView Controllerで何か別のことをしたことはありません。イメージビューとラベルを備えた標準のViewControllerだけで、すべてのセグエは、ストーリーボードのctrlドラッグボタンによって呼び出されます。誰がこれを引き起こしているのか考えていますか?

ありがとう

51
DouglasBoone

Navigation Controllerを初期ビューに追加

  1. 初期ビューを選択
  2. 移動編集-> 埋め込み-> Navigation Controller。
153
Kirit Vaghela

私の場合、元のVC=はセグエを実行しました。

私はそれを解決して:

if (self.navigationController.visibleViewController == self) {
    [self performSegueWithIdentifier:@"thankyou" sender:self];
}

もうクラッシュしません。 :)

14
Gaston

StoryBoardでUINavigationcontrollerを初期ビューコントローラー(初期シーン)として設定します。

13
Vinay

これは、Pushがボタンから、またはView Controllerが継承するNavigation View Controllerではなく、View Controllerを指しているものからセグエするためです。そのため、セグエをNavigation Controllerに向ける必要があります。

お役に立てれば。

4
Yosep Kim

Source View ControllerにNavigation Controllerを組み込むだけです(プッシュするビューではなく、1つの初期ビュー)。これを行うには、ソースビューコントローラーを選択し、エディターに移動->埋め込み-> Navigation Controllerを選択します。

Navigation Controllerが行ったNavigation Barと思われる場合。 Navigation Controllerを選択し、「属性インスペクターを表示」で「ナビゲーションバーを表示」を無効にします。

1
Nicholas Chew

私の特定のケースでは、プッシュを必要とするビューのサブセットを呼び出す場所はコードからのみであり、IBを介して接続できませんでした。ビューのサブセットを作成する元のプロジェクトは専用のボタンで開始されたため、IB 'が可能になりました。

設定可能なセグエは存在しなかったため、Pushでこのエラーが発生しました。

私の解決策は簡単でした:[self showViewController:targetViewController sender:self];

0
drew..

私はそれを解決することができる数分後に同じ問題に直面しました。

セグエ接続を削除し、あるビューから別のビューに再び接続しました。それで問題は解決しました。問題は、ビューを削除し、ストーリーボードシーンのビューにほとんど変更を加えていないことです。そして重要なことは、あるビューから別のビューへの接続が適切に機能していることを確認する必要があるということです。

これは、私が願っている人にとって役立つかもしれません。

アプリケーションにwindowのルートビューコントローラーとしてNavigation Controllerがある場合は、ストーリーボードファイルを選択し、対応するNavigation Controllerを選択します。シミュレートされたメトリックで、Is Initial View Controllerチェックボックスを選択します。これは私のために働いた。お役に立てれば。

0
Singh

uIViewControllerクラスを使用している場合

次に、セグエ識別子の宣言で1つのことを確認します。たとえば、次のように設定しました。

Identifier:MySegue1 Segue:Present Modally(UIViewControllerクラスを使用している場合はこれを選択してください)

プレゼンテーション:デフォルトの遷移:デフォルト

オブジェクトの減速が正しいことをもう1つ確認します

私の答えは正確ではないかもしれませんが、これは私がこのエラー以外に知るすべてのものです。それが少し助けになることを願っています。

0
Shashwat

私は同じ問題に直面しました、そして、私は多くを捜しました、しかし、何も私を助けません。いろいろ試してみましたが、最終的に解決策を見つけました。 Xcode 5でプロジェクトを行い、ストーリーボードを使用してビューを開発しました。 3つの画面があり、接続は..

view1からview2-> Push

view2からview3-> Push

view2からview1-> modal(これは、Pushのみを使用する必要がある私の間違いです)

これはうまく機能していますが、view2にバーボタンアイテム(戻る)を配置しました。セグエ接続はモーダルでした。 view2バーボタンをクリックすると、view1に適切にリダイレクトされますが、view1からview2に進むと同じエラーが発生します。ソースビューから宛先ビューにプッシュセグエタイプを指定する場合、宛先ビューからソースビューに同じプッシュセグエを使用する必要があるためです。

私はそれが誰かに役立つことを願っています。

あなたと同じ問題がありました。

私の問題は、セグエを呼び出していたクラス内からアクセスできないセグエの識別子を呼び出していたことです。私が働いていたクラスにアクセスできるViewControllerからのビューに別のセグエを直接追加することで解決しました。これが役立つことを願っています。

0
bdv