2

这是场景:在我的应用程序中,我正在同步一些数据,只要同步时出现一些错误,我就会在BOOL. 当所有同步完成后,我想为用户显示同步反馈(错误)。

如果存在即日历同步错误联系人同步错误,我首先显示UIAlertView有关日历同步错误的信息,当用户点击“确定”时,我会显示UIAlertView有关联系人同步错误的信息。为了能够知道用户何时点击了“确定”,我使用了完成块。所以我的代码看起来像这样:

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

虽然我确实同意 demosten 最好只有一条消息,但这就是我用更少的代码来做到这一点的方法:

  1. 使用可变数组作为存储警报视图的属性。

  2. 在您测试条件的方法中,为每个评估为真的失败创建一个警报视图,并将它们按所需顺序放入您的数组中。(这是关键部分,因为您只进行 4 次测试,而不是 2^4 - 1 次测试)。

  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 回答