16

私は私が取得し続けているこのSIGABRTを取得していないようです。私はこのストーリーボードiOSアプリケーションを持っており、ストーリーボードにはUITableViewControllerがあります。これで、TVCのセルを取得して、「セグエ」ビューコントローラーをプッシュさせることができますが、特定の条件で「セグエ」アクションを停止する必要がある場合はどうなりますか?prepareForSegue:sender:メソッドでは許可されていないため、どうやらできません。遷移が実行されようとしているときに呼び出されるコールバックはこれだけのようです。

したがって、tableView:didSelectRowAtIndexPath:に移動して、プログラムでセグエを実行できると思いました。最適ではありませんが、それでも…</ p>

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

- (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];
}

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

今:アイデア?

4

1 に答える 1

8

これを試して:

  1. 2番目ではなく最初のコードブロックを使用します。
  2. ストーリーボードコントロールで、セルから他のViewControllerにドラッグします。セグエが作成されることに注意してください。
  3. セグエをクリックします。属性インスペクターを使用して、セグエと識別子「theOtherIdentifier」(小文字の「t」を推奨)を指定します。また、ナビゲーションコントローラーを使用していると仮定して、「プッシュ」のセグエスタイルを選択します。
  4. ストーリーボードは、他のViewControllerをインスタンス化します。コードでこれを行っていないことを確認してください。
于 2012-01-19T14:55:04.537 に答える