8

メインのビュー コントローラーはナビゲーション コントローラーにあり、EditViewControllerDelegateプロトコルに準拠しています。モーダルに表示する必要があるのは、2 つのビュー コントローラーのデリゲートです。

@interface EditViewController : UIViewController
@property (nonatomic) id <EditViewControllerDelegate> delegate;
@end

@interface EditSomethingViewController : EditViewController
@end

@interface EditSomethingElseViewController : EditViewController
@end

メソッドでは、 editViewController:(EditViewController *)evc didFinishEditing:(Something *) something 最初に必要なデータを取得してから、破棄しevcて呼び出します

[self performSegueWithIdentifier:@"My Segue" sender:self];

「My Segue」はXcodeで定義されており、識別子はコードとXcodeの両方で同じです(呼び出されて例外がスローされるかどうかを確認するためだけに変更しようとしました)

「My Seque」のタイプをプッシュに変更すると、うまくいきました。しかし、モーダルでは、メインのView Controllerに戻った後は何もしません

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

編集:

ストーリーボードで誤って警告を見つけました! (「どこからでも見える」プロジェクトの警告ではないので、奇妙です)「ストーリーボードセグエの参照」の下の接続のインスペクターに、モーダルセグエの警告があります。それは言う:

(null) is not a valid containment controller key path

他のモーダルセグエをチェックしたところ、同じ警告が表示されましたが、コードでトリガーする必要がなかったため、以前は問題がありませんでした。

編集2:

-(void)editViewController:(EditViewController *) evc
didFinishEditing:(Something *) something
{
    self.something = something;
    [self dismissModalViewControllerAnimated:YES];
    For ( OtherThing * otherThing in self.something.otherthingsArray)
    {
        NSLog(@"%@", otherThing);
    }
    [self performSegueWithIdentifier:@"My Segue" sender:self];
}
4

2 に答える 2

21

セグエを実行する前に、他のView Controllerのアニメーションが完了するまで待つ必要があります。新しい iOS 5 メソッドを使用できます。

[self dismissViewControllerAnimated:YES completion:^() {
    [self performSegueWithIdentifier:@"My Segue" sender:self];
}];

iOS 5 より前の方法でそれを行う必要がある場合は、セグエを実行する前にアニメーション時間を与えるために遅延を追加する必要があります。

于 2012-04-21T18:45:04.443 に答える