Как конвертировать NSURLConnection -> NSURLSession - PullRequest
0 голосов
/ 25 января 2020

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