Хобрук: Ваш путь к мастерству в программировании

NSJSONSerialization получает индекс ошибки 1 за пределами пустого массива

иногда я получаю ошибку "индекс 1 за пределами пустого массива" в этой строке

NSData *aData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];

Это мой полный код

+ (NSDictionary *)getJson: (NSString *)strURL parameters:(NSDictionary *)parameters{
    NSData *postData = [NSJSONSerialization dataWithJSONObject:parameters options:0 error:nil];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:strURL]
                                                           cachePolicy:NSURLRequestUseProtocolCachePolicy
                                                       timeoutInterval:15.0];

    NSDictionary *headers = @{ @"content-type": @"application/json",
                               @"cache-control": @"no-cache",
                               @"postman-token": @"374a4b6f-b660-78f2-78bf-e22cf0156d8d"};

    [request setHTTPMethod:@"POST"];
    [request setAllHTTPHeaderFields:headers];
    [request setHTTPBody:postData];

    NSURLResponse *response;
    NSError *error;

    NSData *aData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];*

    NSDictionary *json = [NSJSONSerialization JSONObjectWithData:aData options: NSJSONReadingMutableContainers error:&error];
    return json;
}

Иногда я получаю ошибку, иногда нет. Я не понимаю? пожалуйста, помогите мне, спасибо всем.

02.06.2016

  • поставь точку останова и найди где именно происходит сбой, выложи здесь трассировку стека. будет полезно решить проблему 02.06.2016
  • Кажется, проблема не в той строке, которую вы упомянули... 02.06.2016
  • [ссылка]prntscr.com/bbeoaz [ссылка]prntscr.com/bbeoms это моя ошибка. 02.06.2016
  • вы используете какой-то массив для хранения значений? 02.06.2016
  • нет, я использую nsdictionary для хранения параметров запроса и nsdata для хранения данных ответа 02.06.2016

Ответы:


1

Всякий раз, когда вы получаете сообщение об ошибке, подобное приведенному выше, попробуйте следующее:

NSData *aData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];

NSDictionary *json = [NSJSONSerialization JSONObjectWithData:aData options: NSJSONReadingMutableContainers error:&error];

if (error)
{
    //1. See what the error says
    NSLog(error.localizedDescription);

    //2. Convert the original data into a string
    NSString *jsonString = [[NSString alloc] initWithData:aData encoding: NSUTF8StringEncoding];

    //Now take this string and validate it as a JSON at a place like http://jsonlint.com/
}
02.06.2016
  • Я поместил ваш код в свой проект, но он все еще падает в строке sendSynchronousRequest, я не вижу, что говорит об ошибке 02.06.2016

  • 2
     NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL: url
                                                                    cachePolicy: defaultCachePolicy
                                                                timeoutInterval: defaultTimeoutInSeconds];
    

    пожалуйста, измените свою cachePolicy на defaultCachePolicy и попробуйте :)

    02.06.2016
  • я не вижу defalultCachePolicy в списке cachePolicy [ссылка]prntscr.com/bbq1jd ??? 03.06.2016
  • Новые материалы

    Понимание дженериков в TypeScript: подробное руководство
    Введение TypeScript, строго типизированный надмножество JavaScript, хорошо известен своей способностью улучшать масштабируемость, удобочитаемость и ремонтопригодность приложений. Одной из..

    Учебные заметки JavaScript Object Oriented Labs
    Вот моя седьмая неделя обучения программированию. После ruby ​​и его фреймворка rails я начал изучать самый популярный язык интерфейса — javascript. В отличие от ruby, javascript — это более..

    Разбор строк запроса в vue.js
    Иногда вам нужно получить данные из строк запроса, в этой статье показано, как это сделать. В жизни каждого дизайнера/разработчика наступает момент, когда им необходимо беспрепятственно..

    Предсказание моей следующей любимой книги 📚 Благодаря данным Goodreads и машинному обучению 👨‍💻
    «Если вы не любите читать, значит, вы не нашли нужную книгу». - J.K. Роулинг Эта статья сильно отличается от тех, к которым вы, возможно, привыкли . Мне очень понравилось поработать над..

    Основы принципов S.O.L.I.D, Javascript, Git и NoSQL
    каковы принципы S.O.L.I.D? Принципы SOLID призваны помочь разработчикам создавать надежные, удобные в сопровождении приложения. мы видим пять ключевых принципов. Принципы SOLID были разработаны..

    Как настроить Selenium в проекте Angular
    Угловой | Селен Как настроить Selenium в проекте Angular Держите свое приложение Angular и тесты Selenium в одной рабочей области и запускайте их с помощью Mocha. В этой статье мы..

    Аргументы прогрессивного улучшения почти всегда упускают суть
    В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..