NSNull boolValue получение цели аварии c - PullRequest
0 голосов
/ 13 мая 2018

Сбой:

[NSNull boolValue]: нераспознанный селектор отправлен на экземпляр 0x1b5b12878 2018-05-13 19: 04: 46.024492 + 0530 Поставщик Doctor Express [1681: 579933] * Завершение работы приложения из-за необработанного исключения «NSInvalidArgumentException», причина: '- [NSNull boolValue]: нераспознанный селектор, отправленный экземпляру 0x1b5b12878

Код:

NSUserDefaults *pref=[NSUserDefaults standardUserDefaults];

strUserId = [pref valueForKey:PARAM_ID];
strUserToken = [pref valueForKey:PARAM_TOKEN];

NSMutableDictionary *dictparam=[[NSMutableDictionary alloc]init];
[dictparam setObject:strUserId forKey:PARAM_ID];
[dictparam setObject:strUserToken forKey:PARAM_TOKEN];
[dictparam setObject:struser_longi forKey:PARAM_LONGITUDE];
[dictparam setObject:struser_lati forKey:PARAM_LATITUDE];
[dictparam setObject:strRequsetId forKey:PARAM_REQUEST_ID];
[dictparam setObject:@"0" forKey:PARAM_DISTANCE];
AFNHelper *afn=[[AFNHelper alloc]initWithRequestMethod:POST_METHOD];

[afn getDataFromPath:FILE_WALK_LOCATION withParamData:dictparam withBlock:^(id response, NSError *error)
{

    NSLog(@"Update Walk Location = %@",response);
    if (response)
    {
        payment=[[response valueForKey:@"payment_type"] boolValue];
        NSLog(@"Something To Print");
        NSLog(@"%d", payment);
        NSLog(@"Something To Print");

        if (payment==0)
        {
            self.lblPayment.text = NSLocalizedString(@"CARD", nil);
            self.imgCashCard.image = [UIImage imageNamed:@"card"];
        }
        else if (payment==1)
        {
            self.lblPayment.text = NSLocalizedString(@"CASH", nil);
            self.imgCashCard.image = [UIImage imageNamed:@"cash"];

        }
        if([[response valueForKey:@"success"] intValue]==1)
        {
            totalDist=[[response valueForKey:@"distance"]floatValue];
            [self.btnDistance setTitle:[NSString stringWithFormat:@"%.2f %@",[[response valueForKey:@"distance"] floatValue],[response valueForKey:@"unit"]] forState:UIControlStateNormal];
        }
        else
        {
            [self.btnDistance setTitle:[NSString stringWithFormat:@"%.2f %@",[[response valueForKey:@"distance"] floatValue],[response valueForKey:@"unit"]] forState:UIControlStateNormal];

            if ([[response valueForKey:@"is_cancelled"] integerValue]==1)
            {
                [self.timerForCancelRequest invalidate];
                [self.timerForDestinationAddr invalidate];
                NSUserDefaults *pref=[NSUserDefaults standardUserDefaults];
                [pref removeObjectForKey:PREF_REQUEST_ID];
                [pref removeObjectForKey:PREF_NAV];
                strRequsetId=[pref valueForKey:PREF_REQUEST_ID];


                [APPDELEGATE showToastMessage:NSLocalizedString(@"Request Canceled", nil) ];


                is_walker_started=0;
                is_walker_arrived=0;
                is_started=0;
                [btnWalker setHidden:NO];
                [btnArrived setHidden:YES];
                [btnWalk setHidden:YES];

                [self.navigationController popToRootViewControllerAnimated:YES];

            }
        }
    }

}];

Ошибка в этой строке:

NSLog(@"Update Walk Location = %@",response);

"dest_latitude" = 0;
"dest_longitude" = 0;
error = "Сервис еще не запущен";
"error_code" = 414;
"is_cancelled" = 0;
"payment_type" = "";
успех = 0;
единица измерения = км;

Получение значения null для payment_type ... но получение сбоя в этой строке

payment=[[response valueForKey:@"payment_type"] boolValue];

Не знаю, как справиться с этим. Но сама эта функция печати не печатает:

NSLog(@"Something To Print");
NSLog(@"%d", payment);
NSLog(@"Something To Print");

Есть идеи, как с этим справиться?

Обновлено:

  if([response valueForKey:@"payment_type"] != nil || ![[response valueForKey:@"payment_type"] isEqualToString:@""]){
                         payment=[[response valueForKey:@"payment_type"] boolValue];
                         NSLog(@"Something To Print");
                         NSLog(@"%d", payment);
                         NSLog(@"Something To Print");

                         if (payment==0)
                         {
                             self.lblPayment.text = NSLocalizedString(@"CARD", nil);
                             self.imgCashCard.image = [UIImage imageNamed:@"card"];
                         }
                         else if (payment==1)
                         {
                             self.lblPayment.text = NSLocalizedString(@"CASH", nil);
                             self.imgCashCard.image = [UIImage imageNamed:@"cash"];

                         }
                        }

1 Ответ

0 голосов
/ 13 мая 2018

Киран, вы можете проверить, имеет ли значение payment_type значение NULL, прежде чем получите для него boolValue.

NSUserDefaults *pref=[NSUserDefaults standardUserDefaults];

strUserId = [pref valueForKey:PARAM_ID];
strUserToken = [pref valueForKey:PARAM_TOKEN];

NSMutableDictionary *dictparam=[[NSMutableDictionary alloc]init];
[dictparam setObject:strUserId forKey:PARAM_ID];
[dictparam setObject:strUserToken forKey:PARAM_TOKEN];
[dictparam setObject:struser_longi forKey:PARAM_LONGITUDE];
[dictparam setObject:struser_lati forKey:PARAM_LATITUDE];
[dictparam setObject:strRequsetId forKey:PARAM_REQUEST_ID];
[dictparam setObject:@"0" forKey:PARAM_DISTANCE];
AFNHelper *afn=[[AFNHelper alloc]initWithRequestMethod:POST_METHOD];

[afn getDataFromPath:FILE_WALK_LOCATION withParamData:dictparam withBlock:^(id response, NSError *error)

{

NSLog(@"Update Walk Location = %@",response);
if (response)
{
    if([response valueForKey:@"payment_type"] != nil && ![[response valueForKey:@"payment_type"] isEqualToString: ""])
    {
        payment=[[response valueForKey:@"payment_type"] boolValue];
        NSLog(@"Something To Print");
        NSLog(@"%d", payment);
        NSLog(@"Something To Print");

        if (payment==0)
        {
            self.lblPayment.text = NSLocalizedString(@"CARD", nil);
            self.imgCashCard.image = [UIImage imageNamed:@"card"];
        }
        else if (payment==1)
        {
            self.lblPayment.text = NSLocalizedString(@"CASH", nil);
            self.imgCashCard.image = [UIImage imageNamed:@"cash"];

        }
        if([[response valueForKey:@"success"] intValue]==1)
        {
            totalDist=[[response valueForKey:@"distance"]floatValue];
            [self.btnDistance setTitle:[NSString stringWithFormat:@"%.2f %@",[[response valueForKey:@"distance"] floatValue],[response valueForKey:@"unit"]] forState:UIControlStateNormal];
        }
        else
        {
            [self.btnDistance setTitle:[NSString stringWithFormat:@"%.2f %@",[[response valueForKey:@"distance"] floatValue],[response valueForKey:@"unit"]] forState:UIControlStateNormal];

            if ([[response valueForKey:@"is_cancelled"] integerValue]==1)
            {
                [self.timerForCancelRequest invalidate];
                [self.timerForDestinationAddr invalidate];
                NSUserDefaults *pref=[NSUserDefaults standardUserDefaults];
                [pref removeObjectForKey:PREF_REQUEST_ID];
                [pref removeObjectForKey:PREF_NAV];
                strRequsetId=[pref valueForKey:PREF_REQUEST_ID];


                [APPDELEGATE showToastMessage:NSLocalizedString(@"Request Canceled", nil) ];


                is_walker_started=0;
                is_walker_arrived=0;
                is_started=0;
                [btnWalker setHidden:NO];
                [btnArrived setHidden:YES];
                [btnWalk setHidden:YES];

                [self.navigationController popToRootViewControllerAnimated:YES];

            }
        }
    }
}

}];

Надеюсь, это именно то, что вам нужно.

...