Сейчас я занимаюсь разработкой небольшого класса, в котором есть метод для отправки запроса POST. Этот метод предназначен для возврата ResponseModel (который в основном имеет два ivars: code, message), эта модель будет отображаться из ответа. Я использую dataTaskWithRequest:urlRequest completionHandler:
метод. Вот так:
+ (void)sendPOSTRequest1:(id)data withResponse:(void (^) (ResponseModel * data) )taskResponse {
NSError *error = nil;
NSMutableURLRequest * urlRequest = [self getRequestObject];
[urlRequest setHTTPMethod:@"POST"];
NSData * requestData = [self encodeAndEncrypt:data];
[urlRequest setHTTPBody:requestData];
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *dataTask = [session
dataTaskWithRequest:urlRequest
completionHandler:
^(NSData *data, NSURLResponse *response, NSError *error) {
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
ResponseModel * responseModel = [NSKeyedUnarchiver
unarchivedObjectOfClass:[ResponseModel class]
fromData:data
error:&error];
taskResponse(responseModel);
}];
[dataTask resume];
}
И вызовите метод следующим образом:
DummyModel * dummy = [[DummyModel alloc] init];
__block ResponseModel * result = [[ResponseModel alloc] init];
[HTTPRequest sendPOSTRequest1:dummy withResponse:^(ResponseModel *data) {
result = data;
NSLog(@"data %@",data);
}];
// It`s not sure that the asyncronous request has already finished by this point
NSLog(@"POST result : %@",result);
Моя проблема в том, что я не хочу выполнять код в блоке обратного вызовапотому что мне нужно дождаться ответа, чтобы вернуть ResponseModel, и тот, кто его реализует, может получить модель и сделать другие вещи. Я исследовал возможность использования NSURLConnection, потому что у него есть метод для выполнения синхронного запроса, но теперь он устарел, поэтому мне было интересно: можно ли ждать ответа, используя то, что есть в коде?