我需要上傳一些數據到服務器。在這樣做之前,我會獲取這個數據應該綁定到的一個實體(簡單關係)。如果沒有這樣的實體,我想創建它然後繼續上傳過程。但問題是,如果請求太多,所有請求最終都會比創建實體的速度快,因此會創建許多實體。解決方案是同步分派代碼塊,但在不同的線程上。我該怎麼做呢?如何在同一個不同的線程上用多個參數分派塊?
dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH,0), ^{
PFQuery *query = [PFQuery queryWithClassName:@"FileOwner"];
[query whereKey:@"identifier" equalTo:@"ABCDEFG"];
PFObject *fileOwner = [query getFirstObject];
if(fileOwner){
[self continueUploadingData:data completionHandler:completionBlock];
}
else{
PFObject *newFileOwner = [PFObject objectWithClassName:@"FileOwner"];
newPhotoOwner[@"identifier"] = @"ABCDEFG";
[newPhotoOwner saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
if(succeeded)[self continueUploadingData:data completionHandler:completionBlock];
}];
}
});
這個工作,但顯然阻止主線程。我不能使用detachSelector: toTarget: withObject:
,因爲我有多個參數。
爲什麼解決方案同步執行操作?對於異步方法,我有一個答案,但我知道你需要一個同步解決方案。另外,是否在塊的外部定義了'photoOwner'或者是否是拼寫錯誤? –
@WilliamSmith。那麼,我對解決方案感興趣。不在解決方案本身。同步操作只是我的第一個想法,但它不是一個規則。所以我很高興看到你的建議。是的,那是「午夜」的錯字。對不起。 – efimovdk