2012-01-19 3 views
16

私はこのSIGABRTを取得していないようです。私はこのストーリーボードのiOSアプリケーションを持っており、ストーリーボードには私はUITableViewControllerを持っています。さて、私はTVCのセルを取って、 "segue"ビューコントローラを押すことができますが、特定の条件で "segue"アクションを停止する必要があればどうしますか? prepareForSegue:sender:メソッドはそれを許可しておらず、トランジションが実行される直前に呼び出される唯一のコールバックであるようです。performSegueWithIdentifierとinstantiateViewControllerWithIdentifier

だから私はtableView:didSelectRowAtIndexPath:に行くことができ、プログラムでセグを実行することができたと思います。準最適ですが、まだ...

まあ、間違っているとわかります。少なくとも、私は間違ったことをしています。それを行うための最も明白な方法は

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    [self performSegueWithIdentifier:@"TheOtherIdentifier" sender:self]; 
} 

が、任意の有用な情報を与える(とはい、私はそれがアプリのクラッシュを行い、そのラインだと確信しています、私はありませんSIGABRT、と全体のアプリがクラッシュするだろうデバッガでチェック:)さらに、次のコードのため、ロードしようとしているVCに正しく識別子が設定されています。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UIViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"TheOtherIdentifier"]; 
    [self.navigationController pushViewController:vc animated:YES]; 
} 

"works"引用符は、これが明らかにそのような移行を実行する方法ではないことを示しています。

今:アイデア?

+0

この識別子を宛先ビューコントローラに設定したとします。しかし、セグ自体の識別子を設定しましたか?これは、最初のケースで使用する必要がある識別子です。 –

+0

私はそれを見逃していました。さらなるコメントについては、T.J.の回答を参照してください。 – Morpheu5

答えて

8

はこれを試してみてください:

  1. 最初のコードブロックではなく秒を使用してください。
  2. ストーリーボードのコントロールで、セルから別のビューコントローラーにドラッグします。セグが作成されることに注意してください。
  3. セグをクリックします。属性インスペクタを使用して、segueと識別子 "theOtherIdentifier"(小文字の "t"を推奨)を与えます。また、ナビゲーションコントローラを使用していると仮定して、セグスタイルの「プッシュ」を選択します。
  4. ストーリーボードは、他のView Controllerをインスタンス化します。あなたのコードでこれをしていないことを確認してください。
+0

ありがとうございます。これは、問題を明確にします。ただし、IB経由でセグを設定すると、何があっても実行されます。条件を含める必要があります。たとえば、他のセルに入力された値に基づいてユーザーのIDを確認する必要があります。 – Morpheu5

+0

申し訳ありません、私はストーリーボードのコントロール部分がありませんでした:) EDIT:Woops。またすみません。あるVCから別のVCへのセグを作成するためにズームアウトしましたが、トップシステムバーをドラッグすることができたことがわかりました。とにかく心配しない:私は成功した:) – Morpheu5

+0

素晴らしい。私はすべてがうまくいってうれしいです。システム・バーのビュー・コントローラからセレクト・ボタンを選択すると、セグを作成するのは初めてです。私は条件付きセグの隠しボタンを作成していました。 –

関連する問題