Как преобразовать NSURLConnection -> NSURLSession

Я довольно долго пытаюсь сделать эту работу. Код находится в 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];
}

person Win Fan    schedule 24.01.2020    source источник
comment
Возможный дубликат stackoverflow .com/questions/41997641/   -  person danh    schedule 25.01.2020
comment
Взгляните на stackoverflow.com/a/37829399/2305521.   -  person fpg1503    schedule 25.01.2020
comment
(Но вам, вероятно, следует избегать синхронных запросов, особенно в Watch)   -  person fpg1503    schedule 25.01.2020
comment
@fpg1503 fpg1503 Как я могу переключить его на NSURLSession Async?   -  person Win Fan    schedule 25.01.2020
comment
@danh это решение в Swift. Мне нужно решение для Obj-C.   -  person Win Fan    schedule 25.01.2020
comment
@ fpg1503 - я обновил вопрос по ссылке в вашем комментарии. Это нормально?   -  person Win Fan    schedule 25.01.2020
comment
dataTaskWithRequest работает асинхронно. Вы не можете ничего вернуть. Не заставляйте его становиться синхронным. Напишите обработчик завершения. Есть миллионы примеров.   -  person vadian    schedule 25.01.2020
comment
Можешь уточнить вопрос? 1) удалите код NSURLConnection sendSynchronousRequest, это не тот код, который вы хотите заставить работать. 2) удалить фиктивный код, который не является частью минимально проверяемого теста, 3) показать, как вы формируете запрос, передаваемый в код NSURLSession. 4) Показать ошибку (очень важно для отладки).   -  person danh    schedule 25.01.2020