甘いものが好きです

iOS App開発時に感じた疑問や課題、その他の雑感などを書いていきます。

実行時警告「Attempt to dismiss from view controller while a presentation or dismiss is in progress!」への対応

EventKitを利用したAppを開発していたとき、イベント編集画面のView Controller*1上で「完了」/「キャンセル」/「イベントを削除」のいずれかのボタンがタップされたタイミングでこのView Controllerをdismissするために、eventEditViewController:didCompleteWithAction:の中で次のようなコードを書いた。

- (void)eventEditViewController:(EKEventEditViewController *)controller didCompleteWithAction:(EKEventEditViewAction)action {
    
    switch(action) {
        case EKEventEditViewActionCanceled:
            // 必要な処理をここに追加
            break;
        case EKEventEditViewActionSaved:
            // 必要な処理をここに追加
            break;
        case EKEventEditViewActionDeleted:
            // 必要な処理をここに追加
            break;
        default:
            break;
    }
    [self dismissViewControllerAnimated:YES completion:NULL];
}

このコードを実行したところ、正常にdismissすることができたのだが、実行時にデバッグコンソールに以下の警告が出力された。

Warning: Attempt to dismiss from view controller while a presentation or dismiss is in progress!

対処方法を調べたところ、このページが参考になった。

この警告はEKEventEditViewControllerに限った話ではなく、他のView Controllerを利用する場合でもdismiss時に起こることがあるようだ。

警告の文言どおり、View Controllerがdismissされている途中ではない場合にのみ、View Controllerをdismissすればよい。

    if (![[self controller] isBeingDismissed]) {
        [self dismissViewControllerAnimated:YES completion:NULL];
    }

*1:EKEventEditViewController。事前にpresentViewController:animated:completion:によって表示しておいたもの。