исключение: 'параметр данных равен nil', произошла ошибка при доступе к веб-службам HTTP в iOS? - PullRequest
1 голос
/ 19 июня 2019

Я новичок в разработке приложений для iPhone, редко сталкиваюсь со следующей ошибкой при выполнении вызовов API. Большую часть времени я получаю правильный ответ от сервера сервера. Но иногда я сталкиваюсь со следующей ошибкой. Я проверил, нет ли ошибки с URL. Заранее спасибо. Может кто-нибудь поделиться своими знаниями, чтобы получить доступ к вызову API без этой ошибки.

Вот мой код

-(void)callUserAPI {

    arrList = nil;

    NSString *targetUrl;

    //    if ([[dict valueForKey:@"user_id"] isEqualToString:@"1"])
    //        targetUrl = [NSString stringWithFormat:@"%@index.php/restapi/chats?limit=%@",[dict valueForKey:@"support_location"],@"1000"];
    //    else
    targetUrl = [NSString stringWithFormat:@“https://yoururl”,[dict valueForKey:@"support_location"],@"1000"];

    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];

    NSString *authStr = [NSString stringWithFormat:@"%@:%@", [dict valueForKey:@"username"], [dict valueForKey:@"password"]];

    NSData *authData = [authStr dataUsingEncoding:NSUTF8StringEncoding];

    NSString *authValue = [NSString stringWithFormat:@"Basic %@", [authData base64Encoding]];

    [request addValue:authValue forHTTPHeaderField:@"Authorization"];

    [request addValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];

    NSLog(@"%@",request.allHTTPHeaderFields);

    [request setHTTPMethod:@"GET"];

    [request setURL:[NSURL URLWithString:targetUrl]];

    [[[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:
      ^(NSData * _Nullable data,

        NSURLResponse * _Nullable response,

        NSError * _Nullable error) {


             NSDictionary *responseDictionary = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:&error];

             self->arrList = [[NSMutableArray alloc] init];
             self->arrPending = [[NSMutableArray alloc] init];
             self->arrActive = [[NSMutableArray alloc] init];
             self->arrClosed = [[NSMutableArray alloc] init];

             self->arrList =[responseDictionary valueForKey:@"list"];

             // 0 - pending, 1 - active, 2 - closed chat,

             for (NSDictionary *temp in self->arrList) {


                 if ([[temp valueForKey:@"status"] intValue] == 1 ) {
                     if (!([[self->dict valueForKey:@"user_id"] intValue] == 1) ) {
                         if ([[temp valueForKey:@"user_id"] intValue] == [[self->dict valueForKey:@"user_id"] intValue]) {
                             [self->arrActive addObject:temp];
                         }
                     }else{
                         [self->arrActive addObject:temp];
                     }
                 }
                 else if ([[temp valueForKey:@"status"] intValue] == 2 ) {
                     if (!([[self->dict valueForKey:@"user_id"] intValue] == 1) ) {
                         if ([[temp valueForKey:@"user_id"] intValue] == [[self->dict valueForKey:@"user_id"] intValue]) {
                             [self->arrClosed addObject:temp];
                         }
                     }else{
                         [self->arrClosed addObject:temp];
                     }
                 }else if ([[temp valueForKey:@"status"] intValue] == 0 ) {

                     [self->arrPending addObject:temp];

                 }




                 //            if ([dict valueForKey:@"user_id"] == [temp valueForKey:@"user_id"]) {
                 //                if ([[temp valueForKey:@"status"] intValue] == 0) {
                 //                    [self->arrPending addObject:temp];
                 //                }else if([[temp valueForKey:@"status"] intValue] == 1) {
                 //                    [self->arrActive addObject:temp];
                 //                }else if([[temp valueForKey:@"status"] intValue] == 2) {
                 //                    [self->arrClosed addObject:temp];
                 //                }else{
                 //
                 //                }
                 //            }


             }


             dispatch_async(dispatch_get_main_queue(), ^{

                 self->_lblActiveCount.text = [NSString stringWithFormat:@"%lu",(unsigned long)self->arrActive.count];
                 self->_lblPendingCount.text = [NSString stringWithFormat:@"%lu",(unsigned long)self->arrPending.count];
                 self->_lblClosedCount.text = [NSString stringWithFormat:@"%lu",(unsigned long)self->arrClosed.count];

                 [self->_tblView reloadData];

                 [self->HUD hide:YES];
             });


      }] resume];
}

Это то, что я получаю, когда мое приложение выходит в фоновом режиме.

2019-06-19 16: 53: 56.366971 + 0530 LiveTracker [523: 62321] TIC TCP Conn Ошибка [122: 0x282b77540]: 1:53 Ошибка (53) 2019-06-19 16: 53: 56.367912 + 0530 LiveTracker [523: 62321] Задача . <122> Ошибка загрузки HTTP (ошибка код: 53 [1:53]) 2019-06-19 16: 53: 56.374704 + 0530 LiveTracker [523: 62264] Задача <122> закончено с ошибкой - код: 53 2019-06-19 16: 53: 56.378241 + 0530 LiveTracker [523: 62305] * Завершение приложения из-за необработанного исключения NSInvalidArgumentException, причина: «параметр данных равен nil» * Стек первого вызова вызова: (0x1b76ac518 0x1b68879f8 0x1b75b6c70 0x1b8046390 0x100c7b65c 0x1b7c80688 0x1b7c94220 0x1b8110f68 0x1b801d420 0x1b801c908 0x1b8112cec 0x10141f6f0 0x101420c74 0x101423ffc 0x101423458 0x101431dc8 0x1014327ac 0x1b72cd1b4 0x1b72cfcd4) libc ++ abi.dylib: завершается с необработанным исключением тип NSException

1 Ответ

0 голосов
/ 19 июня 2019

Ошибка, скорее всего, генерируется:

NSDictionary *responseDictionary = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:&error];

Это потому, что иногда веб-запросы не выполняются из-за тайм-аута, плохого соединения или даже просто истекшего веб-сеанса. Независимо от причины ошибки вы ДОЛЖНЫ проверить, успешно ли выполнен запрос API, прежде чем предполагать, что у вас есть данные для анализа.

При минимальной проверке, равен ли data ноль в вашем обработчике обратного вызова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...