2

シナリオは次のとおりです。私のアプリでは、いくつかのデータを同期しています。同期中にエラーが発生するたびに、BOOL. すべての同期が完了したら、ユーザーに同期フィードバック (エラー) を表示したいと考えています。

カレンダーの同期エラー連絡先の同期エラーがある場合、最初UIAlertViewにカレンダーの同期エラーに関する情報を表示し、ユーザーが [OK] をタップするUIAlertViewと、連絡先の同期エラーに関する情報を表示します。ユーザーがいつ「OK」をタップしたかを知るために、完了ブロックを使用します。したがって、私のコードは次のようになります。

if (calendarSyncFailed && contactSyncFailed && facebookSyncFailed && contactSyncConflicts) {

    [self displayCalendarSyncAlertCompletionBlock:^{ 

        [self displayContactsSyncAlertCompletionBlock:^{

            [self displayFacebookSyncAlertCompletionBlock:^{

                [self displayContactSyncConflictsAlertCompletionBlock:^{

                }];
            }];
        }];
    }];

} else if (calendarSyncFailed && contactSyncFailed && facebookSyncFailed) {

    [self displayCalendarSyncAlertCompletionBlock:^{ 

        [self displayContactsSyncAlertCompletionBlock:^{

            [self displayFacebookSyncAlertCompletionBlock:^{

            }];
        }];
    }];

} else if (contactSyncFailed && facebookSyncFailed && contactSyncConflicts) {

    [self displayContactsSyncAlertCompletionBlock:^{

        [self displayFacebookSyncAlertCompletionBlock:^{

            [self displayContactSyncConflictsAlertCompletionBlock:^{

            }];
        }];
    }];

} else if (you get the idea…) {

}

ご覧のとおり、これら 4 つのブール値を処理するにはさまざまな組み合わせがあり、これをコーディングするよりスマートでエレガントな方法があるかどうか疑問に思っていました。

4

1 に答える 1

2

メッセージは 1 つだけの方がよいという demosten の意見には同意しますが、少ないコードでこれを行う方法は次のとおりです。

  1. 変更可能な配列を、アラート ビューを格納するプロパティとして使用します。

  2. 条件をテストする方法では、true と評価されるすべての失敗に対してアラート ビューを作成し、それらを目的の順序で配列に配置します。(これは、2^4 - 1 テストではなく、4 つのテストのみを行うための重要な部分です)。

  3. 次のようなUIAlertViewDelegateメソッドを実装します。alertView: didDismissWithButtonIndex:


-(void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex
{
    NSInteger nextIndex = [self.alertViews indexOfObject:alertView] + 1;
    if (nextIndex < [self.alertViews count]){
    UIAlertView *next = [self.alertViews objectAtIndex: nextIndex];
        [next show];
    }
}

于 2012-12-21T12:53:32.637 に答える