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