私は、uiviewcontroller (B) をロードする uivewcontroller (A と呼びましょう) を持っており、B を閉じて A でコードを続行するために使用するデリゲートとして設定します。B が別の uiviewcontroller C につながるシーンもあります (再びデリゲート)。C が閉じられたら、そのデリゲートを使用して B に戻りますが、このシナリオでは、B をすぐに破棄し、コードを A に戻すことも必要です。これで、B->A が機能し、C->B が機能しますが、C- を実行します>B->A が B で失敗し、「ビューが現在表示されていないモーダル ビュー コントローラーを閉じようとしています」というエラーが表示され、ビュー C を再度閉じようとしているようです。
両方のビューコントローラーがこのコードで閉じられています (コードは別の uiviewcontrollers にありますが)
[self dismissViewControllerAnimated:YES completion:nil];
目的のためにデリゲートを正しく使用していますか、それとも別のプロセスを使用する必要がありますか?
オプション 1 のコード (A->B、B<-A):
A -> B
scorer_turn *st = (scorer_turn *) segue.destinationViewController;
st.st_delegate=self;
st.league = _match.league;
st.match = _match;
st.leg = _leg;
st.set = _set;
B -> A
-(void)closeView{
[_st_delegate scorer_turn:self didFinish:YES];
}
-(void)scorer_turn:(scorer_turn *)controller didFinish:(BOOL)finish{
[self dismissViewControllerAnimated:YES completion:nil];
}
オプション 2 のコード (A->B、B->C、C->B->A):
上記と同様: B -> C
matchSummaryViewController *ms = (matchSummaryViewController *) segue.destinationViewController;
ms.match = _match;
ms.oneScreen = NO;
ms.delegate = self;
[[segue destinationViewController] setManagedObjectContext:self.managedObjectContext];
C -> B、B -> A
C: [_delegate matchSummaryViewController:self didFinish:YES]; B: [自己却下ViewControllerAnimated:YES完了:nil]; [_st_delegate scorer_turn:self didFinish:YES]; A (ここでエラーが発生します):
-(void)scorer_turn:(scorer_turn *)controller didFinish:(BOOL)finish{
[self dismissViewControllerAnimated:YES completion:nil];
}