1

iOS6.0ストーリーボードを有効にして実行しています

TableViewControllerにリンクされたNavControllerがあります。このTableViewは、AViewControllerまたはBViewControllerにセグエできます。

私がAにいるとき、ルートに戻って、次の行でBへのセグエを実行したいと思います。

UINavigationController *nav = self.navigationController;
[nav popToRootViewControllerAnimated:YES];
[nav performSegueWithIdentifier:@"GoToB" sender:self];

ストーリーボードを確認しました。GoToBは存在し、TableViewControllerからBViewControllerにリンクされています。

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Receiver (<NavMainViewController: 0xb921fa0>) has no segue with identifier 'GoToB''

私は何が欠けていますか?

4

1 に答える 1

2

セグエは、ポップしたビューコントローラにアタッチされますが、セグエをnav含むコンテナビューコントローラではありません。したがって、これはより近くなります。

UINavigationController *nav = self.navigationController;
[nav popToRootViewControllerAnimated:YES];

UIViewController *rootVC = [nav.viewControllers objectAtIndex:0];
[rootVC performSegueWithIdentifier:@"GoToB" sender:self];

しかし、ここでの問題は、ポップアニメーションがセグエと競合することだと思います。... Animated:NOを使用してポップを実行すると修正される可能性がありますが、rootVCからセグエを実行する方が正しい(そしてアニメーションに対してより堅牢である)と思います。

rootVCは、viewDidAppearを次のように実装します。

- (void)viewDidAppear:(BOOL)animated {

    [super viewDidAppear:animated];
    if (!self.isBeingPresented && /* any other condition that makes you want this */) {
        [self performSegueWithIdentifier:@"GoToB" sender:self];
    }
}
于 2013-01-19T18:31:05.330 に答える