2015-10-19 15 views
16

Avevo chiamato un'interfaccia di Baidu per verificare numero ID, tuttavia il valore di Sex restituito con sex = M, senza "" attorno a M in JSON, quando uso NSString nel modulo per memorizzarlo e quindi stampa il nome della classe di questa proprietà del sesso, viene stampato come NSTaggedPointerString, dubito di come convertirlo in una stringa per usarlo. Qualcuno ha buone idee?converti NSTaggedPointerString in NSString

+0

{ ErrNum = 0; retData = { address = "\ U6e56 \ U5317 \ U7701 \ U7701 \ U76f4 \ U8f96 \ U53bf \ U7ea7 \ U884c \ U653f \ U533a \ U5212 \ U4ed9 \ U6843 \ U5e02"; birthday = "1989-07-10"; sex = M; }; retMsg = successo; } Questo è il JSON che restituisce –

risposta

24

NSTaggedPointerString è già un NSString, è solo una sottoclasse. Puoi usarlo ovunque tu possa usare una NSString, senza conversione.

+0

Grazie, lo trovo appena ho usato gli argomenti sbagliati in swift, dovrebbe usare% @ proprio come Obj-C ma ho usato% s invece. Ho corretto l'errore. –

+0

Nella mia cace, quando non converte di quanto avverte \ n "Tipi di puntatori incompatibili che inizializzano ~~" – Kernelzero

+1

Questo è un problema completamente diverso. NSTaggedPointerString riguarda il tipo dinamico dell'oggetto. Il tuo problema riguarda il tipo che hai scritto nel tuo codice sorgente. –

0

Nel mio caso figlio {"count": "123"} Ho ricevuto l'errore. Risolto:

// Data was created, we leave it to you to display all of those tall tales! 
// NSLog(@«data: %@", [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]); 

NSDictionary * json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil]; 
if ([json isKindOfClass:[NSDictionary class]]){ //Added instrospection as suggested in comment. 
        NSArray *dicArray = json[@"count"]; 
        NSLog(@"=:%@", dicArray); 

} 
9

ho incontrato luoghi dove non può essere utilizzato come una stringa, come ad esempio quando si crea un NSDictionary. In questi casi utilizzare stringWithString::

NSString* <# myNSString #> = [NSString stringWithString:<# myNSTaggegedString #>]; 
+0

Ho trovato più semplice dire semplicemente NSDictionary * aDict = @ {[myvar valueForKey: @ "item"] poiché la proprietà .property non funziona bene. KVO in soccorso –

2

Ho avuto questo stesso problema più volte. Sembrerebbe che l'inferenza di tipo per NSDictionary non sia una scienza esatta. Quello che faccio è specificamente chiedere se l'oggetto risponde a un particolare metodo. Per esempio, se sto scorrendo parsing alcuni JSON e sto cercando di accedere ad un valore di tipo NSString:

NSString * string; 
if ([[dict objectForKey:@"value"] respondsToSelector:@selector(stringValue)]) { 
    string = [[dict objectForKey:@"value"] stringValue]; 
} 
else { 
    string = [NSString stringWithString:[dict objectForKey:@"value"]]; 
} 
documentFile.documentRevision = string;