Я довольно долго пытаюсь сделать эту работу. Код находится в Objective-C, и я не знаю, как преобразовать приведенный ниже код для использования NSURLSession. Я получаю сообщение об ошибке при возврате.
- (NSData *)sendSynchronousRequest:(NSURLRequest *)request returningResponse:(NSURLResponse **)response error:(NSError **)error
{
if ( _staticHandler != nil) {
SBStaticHandlerResponse* mockResponse = _staticHandler(request);
if ( mockResponse != nil) {
(*response) = [[NSHTTPURLResponse alloc] initWithURL:[request URL] statusCode:200 HTTPVersion:nil headerFields:mockResponse.Headers];
return mockResponse.Data;
}
}
return [NSURLConnection sendSynchronousRequest:request returningResponse:response error:error];
// ERROR: 'sendSynchronousRequest:returningResponse:error:' is unavailable: not available on watchOS
}
Основываясь на ссылке в комментарии, я обновил код. Это правильный путь?
- (NSData *)sendSynchronousRequest:(NSURLRequest *)request returningResponse:(NSURLResponse **)response error:(NSError **)error
{
NSError __block *err = NULL;
NSData __block *data;
NSURLResponse __block *resp;
[[[NSURLSession sharedSession] dataTaskWithRequest:request
completionHandler:^(NSData* _data,
NSURLResponse* _response, NSError* _error) {
resp = _response;
err = _error;
data = _data;
}] resume];
if ( _staticHandler != nil) {
SBStaticHandlerResponse* mockResponse = _staticHandler(request);
if ( mockResponse != nil) {
(*response) = [[NSHTTPURLResponse alloc] initWithURL:[request URL] statusCode:200 HTTPVersion:nil headerFields:mockResponse.Headers];
return mockResponse.Data;
}
}
return data;
//return [NSURLConnection sendSynchronousRequest:request returningResponse:response error:error];
}
dataTaskWithRequest
работает асинхронно. Вы не можете ничего вернуть. Не заставляйте его становиться синхронным. Напишите обработчик завершения. Есть миллионы примеров. - person vadian   schedule 25.01.2020NSURLConnection sendSynchronousRequest
, это не тот код, который вы хотите заставить работать. 2) удалить фиктивный код, который не является частью минимально проверяемого теста, 3) показать, как вы формируете запрос, передаваемый в код NSURLSession. 4) Показать ошибку (очень важно для отладки). - person danh   schedule 25.01.2020