Как сохранить корректно данные при отправке нескольких GET запросов?

Всем привет! Товарищи, выручайте!
Вообщем у меня есть несколько GET запросов. Не могу корректно сохранить данные при распарсивании. Подскажите, пожалуйста, как лучше реализовать сохранение?
Попробовал через dispatch_async, но не селен в этом (ничего не получилось).
Сохраняю в homesJSON и roomsJSON.
Сначала сделал так.
#pragma mark Processing the received response

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
    NSHTTPURLResponse* httpResponse = (NSHTTPURLResponse*)response;
    NSInteger responseStatusCode = [httpResponse statusCode];
    NSLog(@"Код сервера = %li", (long)responseStatusCode);
    
    // получен ответ от сервера
    [_receivedData setLength:0]; // очистка ранее полученных данных
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    // добавляем новые данные к receiveData
    [_receivedData appendData:data];
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    // выполнение операций с полученными данными
    NSLog(@"Обработка полученных данных");
    
    _resultResponse = [[NSString alloc] initWithData:_receivedData encoding:NSUTF8StringEncoding];
    NSLog(@"dataStr = %@", _resultResponse);
    
    _homesJSON = [HomesModel arrayOfModelsFromString:_resultResponse error:nil];
    if (_homesJSON)
        NSLog(@"Data homes saved.");
    
    _roomsJSON = [RoomsModel arrayOfModelsFromString:_resultResponse error:nil];
    if (_roomsJSON)
        NSLog(@"Data rooms saved.");
}

Потом попробовал через dispatch_async.
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^
                   {
                       [self getRequestHomes];
                       _homesJSON = [HomesModel arrayOfModelsFromString:_resultResponse error:nil];
                       if (_homesJSON)
                           NSLog(@"Data homes saved.");
                   });
    
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^
                   {
                       [self getRequestRooms];
                       _roomsJSON = [RoomsModel arrayOfModelsFromString:_resultResponse error:nil];
                       if (_roomsJSON)
                           NSLog(@"Data rooms saved.");
                   });
  • Вопрос задан
  • 168 просмотров
Решения вопроса 1
Antonio-banderas
@Antonio-banderas
iOS Developer
А не пробовали просто юзать NSURLSession? и NSURLSessionDataTask -
- dataTaskWithRequest:completionHandler: а в completionHandler блок весь нужный парсинг
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
alexyat
@alexyat
iOS Developer
По идее это вообще не должно работать, т.к. и сам NSURLConnection асинхронный так вы еще асинхронный диспач делаете. Я бы сразу в диспатче, вот так бы сделал
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^
                   {
                       NSString *_resultResponse = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"https://blabla.com/user?id=1"] usedEncoding:NSUTF8StringEncoding error:nil];
                       _homesJSON = [HomesModel arrayOfModelsFromString:_resultResponse error:nil];
                       if (_homesJSON)
                           NSLog(@"Data homes saved.");
                   });

это в стиле х*як-х*як и в продакшен

и еще если вы общаетесь с сервером по http, а не по https, то в Info.plist нужно добавить App Transport Security Settings как на скриншоте

20bc025b23a54105bf1769834669805e.png
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы