以下是该场景:在我的应用中,我正在同步一些数据,每当同步时出现一些错误,我会在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个布尔值会有很多不同的组合,我想知道是否有更智能/更优雅的编码方式?
答案 0 :(得分:2)
虽然我同意demosten,只有一条消息会更好,但我会用更少的代码来实现这一点:
使用可变数组作为存储警报视图的属性。
在测试条件的方法中,为每个计算结果为true的失败创建一个警报视图,并按所需顺序将它们放入数组中。 (这是关键部分,因为您只进行了4次测试,而不是2 ^ 4 - 1次测试)。
实施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];
}
}