2013-09-27 14 views
10

performSegueWithIdentifierを動作させるのに苦労しています。performSegueWithIdentifierは識別子エラーのセグを生成しません

  1. ステップは: - ビューコントローラに「ビューコントローラA」単一のビューアプリケーションを作成し、ラベルを追加しました は、私は私がやったこと

    "Receiver (<UINavigationController: 0x1e59a9d0>) has no segue with 
    identifier 'identA'" 
    

    を取得しておくことです。

  2. ステップ:別のView Controllerをドラッグ&ドロップし、ラベル「View controller B」を新しいView Controllerに追加しました。
  3. ステップ:ビューコントローラAを選択し、Editorの>埋め込みIN->ナビゲーションコントローラ
  4. ステップ実行:このような識別子「identA」とプッシュセグエとコントローラBを表示する表示コントローラA有線: wiring the seque

  5. ステップ:ビューコントローラAのViewDidLoadでperformSegueWithIdentifierの呼び出しを追加しました。このように:


- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    [self.navigationController performSegueWithIdentifier:@"identA" sender:self]; 
    // Do any additional setup after loading the view, typically from a nib. 
} 

私が間違って何をしました?

+3

私はあなたが '[self performSegue ...]'ではなく '[self.navigationController perfo ...] ' – erdekhayser

+0

うんうん右.... – Yony

+0

時々それは私たちが考えていない簡単なことです – erdekhayser

答えて

26

あなたはself.navigationControllerperformSegueWithIdentifier:sender:を呼んでいるが、あなたは、セットアップView controller Aのセグエ:

有線ビューコントローラAは 識別子 "identA"

でプッシュセグエとコントローラBを見るために交換してみてください:

[self.navigationController performSegueWithIdentifier:@"identA" sender:self]; 

[self performSegueWithIdentifier:@"identA" sender:self]; 
+1

あなたはこれを行うときにどのようにpopViewControllerですか? – hitme

+0

@stefanB、swift 2.0と同等のものは何ですか?これは:self.performSegueWithIdentifier( "loginView"、送信者:自己); – alex

4

(今日の私を救った)ちょうど別の提案...

私はiPhoneをマスター詳細ページ、ナビゲーションコントローラなどを使用して、前にアプリが、今日は、私は困惑した多くのiPad &を書きましたXCode 5.1の私のシンプルな2画面のiPhoneアプリは、UINavigationController内で画面間を分割することを拒否していたためです。

それは意味をなさないそれらの狂気のXコードバグの別のものです。私はXCodeプロジェクトの新しいを作成することもできました。そこには、同じセグが完全に機能します。

[self performSegueWithIdentifier:@"segueTest" sender:nil]; 

最終的に原因を見つけました。

私はXCodeで空のプロジェクトを作成していましたが、手作業でストーリーボードをプロジェクトに追加しましたが、一歩足りませんでした。

自分でストーリーボードを追加する場合は、.plistファイルに移動して、メインストーリーボードの名前をアプリに伝える行を手動で追加する必要があります。

enter image description here

アプリ実行される、正常に構築する、妙に、これをしない場合は、おそらく、その後、正常に表示されるあなたの最初の画面を得る...しかしますセグの名前のようなものは間違って始まります。

(ため息。)

私は、これは他のXCodeの被害者を支援したいと考えています。

ビールが必要です。

0

ここの特定の状況のビットですが、私の状況では私はUISplitViewControllerを新しいプロジェクトに設定しました。私は、マスターテーブルビューでセルを押した後、ディテールビューコントローラーでセグを実行したかったのです。だからviewDidLoad:

[[NSNotificationCenter defaultCenter]postNotificationName:@"userDetails" 
                  object:nil]; 

、詳細ビューで行わマスターテーブルのdidSelectRowAtIndexPath:にIは、観察者とインスタンスメソッド

[[NSNotificationCenter defaultCenter]addObserver:self 
             selector:@selector(userDetailsShow) 
              name:@"userDetails" 
              object:nil]; 
-(void)userDetailsShow{ 
    [self performSegueWithIdentifier:@"userDetails" sender:nil]; 
} 

マスタービューでセルを押すと、それは発射だろうが追加しましたメソッドは何もしません。これは問題であることが分かりました:

私は、マスターテーブルビューセルと詳細ナビゲーションコントローラの間でデフォルトのセグを有効にしていました。この場合、私はそれを必要としなかったので、それを削除することができました。それを削除すると、それは正常に動作しました。
うまくいけば、私は今この髪を戻すことができます...

関連する問題