2013-02-02 18 views
6

quando sto ottenendo i valori da JSON php allora sto ottenendo problema per __NSCFBoolean isEqualToString:__NSCFBoolean isEqualToString:]: selettore non riconosciuto inviato ad esempio

Il mio codice è il seguente:

- (void)connectionDidFinishLoading:(NSURLConnection *)connection { 
     //convert to JSON 
     for(id key in res) { 
     id value = [res objectForKey:key]; 

     NSString *keyAsString = (NSString *)key; 
     NSString *valueAsString = (NSString *)value; 
     //NSCFBoolean 
     /*if([value isKindOfClass:[NSNumber class]]) 
     { 
      printf("Number"); 
     } 
     else if([value isKindOfClass:[NSString class]]) 
     { 
      printf("String --- \n"); 
      if([value isEqualToString:@"0"]) 
      { 
       printf("Wrong \n"); 
      } 
      else 
      { 
       printf("Right \n"); 
      } 
     }*/ 
     NSLog(@"%@",[valueAsString class]); 
     if([keyAsString isEqualToString:@"success"]) 
     { 
      printf("Working \n"); 
     } 
     else 
     { 
      printf("Not Working\n"); 
     } 
     //Error is in below line 
     if([valueAsString isEqualToString:@"0"])// strcmp([value objCType], @encode(BOOL)) == 1) 
     { 
      [self loginSuccess]; 
     } 
     else if(strcmp([value objCType], @encode(BOOL)) == 0) 
     { 
      [self loginFailure]; 
     } 
     NSLog(@"key: %@", keyAsString); 
     NSLog(@"value: %@", valueAsString); 
    } 

} }

Ottenere emissione di [__NSCFBoolean isEqualToString:]: selettore non riconosciuto inviato ad esempio 0x1dc9964

Searchi Google per questo problema da ieri, ma ancora nessuna soluzione. NSCFBoolean non è disponibile anche in iOS 6.0, ora. Quindi cosa posso fare per controllare "0" o "1" dalla stringa JSON? Per favore aiuto.

risposta

17

value è un oggetto NSNumber (__NSCFBoolean, perché NSNumber è un gruppo classe) e non una stringa! Utilizza [value boolValue] per determinare se è 0 o 1.

Il casting di un oggetto non cambia il suo tipo!

+0

Ho anche provato lo stesso, ma non funziona. :( – VarunJi

+4

Cambia '[valueAsString isEqualToString: @" 0 "]' a '[valore boolValue] == 0' –

+2

' [valore boolValue] == NO' sarebbe meglio, e '! [Valore boolValue]' sarebbe il migliore –

0

Ecco la parte sospetta:

if([keyAsString isEqualToString:@"success"] && [valueAsString isEqualToString:@"0"]) 
{ 
} 

In entrambi i keyAsString, valueAsString (probabilmente questo), o entrambi, non sono oggetti stringa. Perché? Non possiamo sapere questo dal tuo codice, probabilmente stai facendo qualcosa di sbagliato con i tuoi dati JSON. Mostraci altro codice per favore.

EDIT

Prova questo:

if([keyAsString isEqualToString:@"success"] && [valueAsString isEqualToNumber:@(NO)]) 
{ 
} 
+0

keyAsString va bene ma valueAsString non funziona. Appena controllato – VarunJi

+0

Stampa classe come questa: NSLog (@ "% @", [valueAsString class]); Sarà sicuramente __NSCFBoolean. –

+0

Sì, è __NSCFBoolean. Ora come farlo funzionare? – VarunJi

Problemi correlati