2015-06-25 4 views
2

я реализовал некоторые JSon поста в Objective C и после того, как я получил информацию, я пытаюсь нажать метод SEGUE, но он бросает это исключениевыполнить переход кидает ошибки

2015-06-25 00: 08: 33,807 BarApp [1446: 109590] - [длина NSNull]: непризнанный селектор направлена ​​например 0x37439830

2015-06-25 00: 08: 33,809 BarApp [1446: 109590] *** Нагрузочного приложения из-за неперехваченное исключение 'NSInvalidArgumentException' , причина: '- [NSNull length]: непризнанный селектор, отправленный в пример 0x37439830'

и это мой код

-(void) MakePost: (int)typePost { 
    NSString *mainUrl = @"http://url.com/barap/usuario.php"; 
    NSString *post; 

    if(typePost == 0) { 
     post = [NSString stringWithFormat:@"?type=0&email=%@&password=%@",self.emailTextField.text, self.passwordTextField.text]; 
    }else if(typePost == 1){ 
     post = [NSString stringWithFormat:@"?type=1&fb_id=%@&nombre=%@&apellido_m=%@&email=%@&profile_picture=%@",fb_id, nombre, apellidoM, email, profilePictureUrl]; 
    } 

    NSString *webPostUrl = [NSString stringWithFormat:@"%@%@", mainUrl, post]; 
    webPostUrl =[webPostUrl stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
    NSURL *postUrl = [NSURL URLWithString:webPostUrl]; 
    NSData *userInfo = [[NSData alloc] initWithContentsOfURL:postUrl]; 

    if(userInfo){ 
     NSMutableDictionary *userResults = [NSJSONSerialization JSONObjectWithData:userInfo options:NSJSONReadingMutableContainers error:nil]; 
     if (![userResults[@"id"] isEqualToString:@""]) { 
      [defaults setObject:userResults[@"id"] forKey:@"userId"]; 
      NSLog(@"%@", [[NSUserDefaults standardUserDefaults] valueForKey:@"userId"]); 

это где мой код распадается!

[self performSegueWithIdentifier:@"loginSuccess" sender:self]; 


      if(typePost == 1){ 
       [FBSDKAccessToken setCurrentAccessToken:nil]; 
       [FBSDKProfile setCurrentProfile:nil]; 
      } 
     } 
    }else { 
     UIAlertView* cError = [[UIAlertView alloc]initWithTitle:@"Erro!" message:@"Tuvimos un Error intente mas tarde" delegate:self cancelButtonTitle:@"Cancelar" otherButtonTitles:@"OK", nil]; 
     [cError show]; 
    } 
} 

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    if([[segue identifier] isEqualToString:@"loginSuccess"]) { 
     [segue destinationViewController]; 
    } 
} 

ответ

3

Сообщение указывает на то, что метод length был вызван на NSNull объекта. Поскольку метод length скорее всего, будет ссылаться на NSString

Проверить эту ссылку

-[NSNull length]: unrecognized selector sent to JSON objects

Надеется, что это помогает.

1

вы должны проверить на [NSNULL null]. В запросе Json вы получаете или больше NSNUll.

проверить это может это йор need- [NSNull isEqualToString:]

этих линий поможет вам более- NSMutableDictionary * dicAfterRemovingNull = [NSMutableDictionary dictionaryWithDictionary: yourDictionary]; // если словарь и массив изменить эту строку с MutableArray

for(NSString *key in [dicAfterRemovingNull allKeys]) 
{ 
    const id object = [dicAfterRemovingNull objectForKey:key]; 
    if(object == [NSNull null]) 
    { 
     [dicAfterRemovingNull setValue:@"whatever you want" forKey:key]; 
    } 
} 
Смежные вопросы