2016-12-07 2 views
0

ich den Wert von newDetails als string.When immer versuche ich den folgenden Code erhalte ich eine Ausnahme alskonnte nicht JSON erhalten von String

[__NSArrayI dataUsingEncoding:]: Unbekannter Selektor an Instanz gesendet.

Ich habe newDetail als NSString deklariert. Auch die Werte von newDetail in diesem und dem folgenden Code sind gleich. Hier ist der Code:

newDetail = [response valueForKey:@"newDetail"]; 
//newDetail prints as {"number":1,"nid":"1","pId":"3","name":"","me":"","day":"1"} 
     NSError *error; 
     NSData* data = [newDetail dataUsingEncoding:NSUTF8StringEncoding]; 
     NSDictionary* json = [NSJSONSerialization 
           JSONObjectWithData:data 
           options:kNilOptions 
           error:&error]; 

Aber wenn ich den Code unten versuchen, es läuft perfekt:

newDetail = @" {\"number\":1,\"nid\":\"1\",\"pId\":\"3\",\"name\":\"\",\"me\":\"\",\"day\":\"1\"}";  
     NSError *error; 
     NSData* data = [newDetail dataUsingEncoding:NSUTF8StringEncoding]; 
     NSDictionary* json = [NSJSONSerialization 
           JSONObjectWithData:data 
           options:kNilOptions 
           error:&error]; 

Kann mir jemand sagen, warum ich eine Ausnahme bin immer?

+0

Meine Vermutung wäre, dass der Wert für den Schlüssel „newDetail“ ist nicht eine Zeichenfolge, aber ein anderer Datentyp. Möglicherweise [NSNull null]. – Chris

+0

Ich drucke den Wert von newDetail, es ist nicht null – apurv

+0

Und Sie sind sicher, dass es als String und kein Wörterbuch zurückkommt? Die Zeile, die ausgedruckt wird, ist mehrdeutig. – Chris

Antwort

1

Es scheint mir, dass der folgende Code gibt ein NSArray:

newDetail = [response valueForKey:@"newDetail"]; 

ich vermuten, dass dieses wegen der Fehlermeldung, die besagt, dass Sie versuchen, die Methode -dataUsingEncoding: auf einem NSArray Objekt aufzurufen.

Aber ... Sie erwähnen es druckt wie:

{"number":1,"nid":"1","pId":"3","name":"","me":"","day":"1"} 

Welche es ist ein NSDictionary (Schlüssel/Wert-Paare) bedeuten würde.

Sie könnten der Klasse melden Sie sich wie folgt sicher sein:

NSLog(@"%@", [newDetail class]); 

Ihre Version funktioniert, weil Sie einen String codieren. Sie sollten den gleichen Fehler, wenn Sie einen NSDictionary serialisiert würde versuchen, oder vielleicht sogar eine NSArray in eine JSON-String, wie folgt aus:

// This should result in the same error, since we serialize 
// an empty dictionary into a JSON string. 
NSDictionary* json = [NSJSONSerialization JSONObjectWithData:@{} 
                options:kNilOptions 
                 error:&error]; 
+0

danke ... konnte es lösen. – apurv