2013-09-30 13 views
17
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 
[manager GET:@"http://example.com/resources.json" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) { 
    NSLog(@"JSON: %@", responseObject); 
} failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
    NSLog(@"Error: %@", error); 
}]; 

questo è il recommended way di inviare GET richiesta AFNetworking 2.0. Voglio ottenere il valore di una chiave specifica in JSON, quindi voglio usare responseObject come NSDictionary. questo è quello che cercavo:AFNetworking 2.0 - usare responseObject come NSDictionary

NSError *jsonError = nil; 
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:(NSData *)responseObject options:kNilOptions error:&jsonError]; 

non ha funzionato:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFDictionary bytes]: unrecognized selector sent to instance 0xa048120' 

come posso ottenere il valore di una chiave specifica in responseObject?

risposta

30

Per impostazione predefinita, AFHTTPRequestOperationManager set responseSerializer a un AFJSONResponseSerializer esempio, in modo responseObject già è il vostro analizzata JSON (nel tuo caso, sarà un NSDictionary in base a ciò che hai detto).

Poi, basta usare come devi usare un dizionario:

NSString *value = responseObject[@"someKey"]; 
+0

Ho avuto un problema simile utilizzando AFNetworking. Ricevo un oggetto JSON analizzato e devo conservarlo in un array per un uso futuro. Il JSON analizzato è un dizionario con stringhe come valori? Non riesco a usare KVC per entrare nel dizionario anche se – noobsmcgoobs

5

L'oggetto risposta è già un dizionario! AFNetworking lo ha gestito per te.

+0

@Irfan: Penso che la tua tipografia renda più difficile la lettura. – vikingosegundo