我需要上传一些数据到服务器。在这样做之前,我会获取这个数据应该绑定到的一个实体(简单关系)。如果没有这样的实体,我想创建它然后继续上传过程。但问题是,如果请求太多,所有请求最终都会比创建实体的速度快,因此会创建许多实体。解决方案是同步分派代码块,但在不同的线程上。我该怎么做呢?如何在同一个不同的线程上用多个参数分派块?
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