0
我正在使用MKNetworkKit库来对服务器进行REST调用。当用户想要创建照片喜欢或不喜欢时,会调用此特定的片段集。如果我们只为单张照片设置最喜欢的标志,这是非常直接的objective-c块代码。不过,我在GUI中推出了多选机制,以便用户可以选择多张照片并一次全部收藏。在一个函数内跟踪多个REST调用完成的好习惯
我写的功能做得很好,但对我来说感觉不太干净。
我不喜欢什么:
跟踪所有的回调有块计数器。我想知道是否有更优雅的方式来处理这个问题。
两个完成块中都存在相同的代码。然而,这只是MKNetworkKit的使用方式(一块成功,一块出错)。我想,如果我将这个方法做成一个实例方法,我可以通过调用另一个方法来处理它,但是看起来就像做混乱的所有设置一样。我想保持这是一个方便的类方法实用程序。
建议?
+(BOOL)updateAssets:(NSArray*)assets
isFavorite:(BOOL)isFavorite
completion:(MyAssetCompletion)completion // (BOOL success)
{
assert(assets);
if (assets == nil || assets.count == 0) return NO;
__block BOOL bError = NO;
__block NSInteger counter = 0; // Use a counter to track number of completed REST calls
for(MyAsset *asset in assets){
MyUpdateAssetForm *form = [[MyUpdateAssetForm alloc] init];
form.isPrivate = isFavorite ? @(1) : @(0);
[[MyRESTEngine sharedInstance] updateAssetWithUUID:asset.UUID
withForm:form
completionBlock:^{
counter++;
if(counter == assets.count){
completion(bError == NO);
}
} errorBlock:^(NSError *error, NSString *additionalInfo) {
bError = bError || YES;
counter++;
if(counter == assets.count){
completion(bError == NO);
}
}];
}
return YES;
}
仅供参考,在未来,我们的服务器将接受的资产清单,所以我将只需要进行一次电话,但直到那时..... – VaporwareWolf 2013-04-04 19:02:22
我和你在一起,因为它看起来有点丑陋,但据我所知,这是处理多个回调的正确方法。 – Taum 2013-04-04 20:58:11