2013-03-20 9 views
8

Sto cercando di analizzare JSON per un'app ios 6, ma non riesco a farlo funzionare. Ho setacciato tonnellate di forum ma non ho trovato una soluzione che funzioni, che comprenda abbastanza da implementare o che sia valida.L'operazione non può essere completata. (Errore cacao: 3840.)

Mi scuso se ce n'è uno che mi è mancato.

prima devo un webservice di prova che, per quanto posso dire rendimenti valido JSON

http://thetrouthunter.com/SVLocationsAPI.php

In secondo luogo, qui è il mio codice Objective-C:

+ (NSDictionary *)connectToService:(NSString *)query 
{ 
    NSError *error = nil; 

    query = [NSString stringWithFormat:@"%@&format=json&nojsoncallback=1", query]; 
    query = [query stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 

    NSData *jsonData = [[NSString stringWithContentsOfURL:[NSURL URLWithString:query] encoding:NSUTF8StringEncoding error:nil] dataUsingEncoding:NSUTF8StringEncoding]; 

    NSDictionary *results = jsonData ? [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers|NSJSONReadingMutableLeaves error:&error] : nil; 

    NSLog(@"locations: %@", results); 

    if (error) 
     NSLog(@"[%@ %@] JSON error: %@", NSStringFromClass([self class]), NSStringFromSelector(_cmd), error.localizedDescription); 

    return results; 
} 

+ (NSArray *)userLocation { 
    NSString *request = [NSString stringWithFormat:@"http://thetrouthunter.com/SVLocationsAPI.php"]; 
    return [[self connectToService:request] valueForKeyPath:@"locations.location"]; 
} 

Le ls funzione NSLog sta stampando l'errore: "L'operazione non può essere completata. (Errore cacao: 3840.)"

Non riesco a capire perché questo è il caso. Ho provato ogni sorta di cose.

risposta

4

Si sta aggiungendo %@&format=json&nojsoncallback=1 all'URL in connectToService:, e che i nuovi risultati URL in una pagina web, non il JSON che ci si aspetta (cioè http://thetrouthunter.com/SVLocationsAPI.php&format=json&nojsoncallback=1).

Potrebbe essere utile registrare il risultato effettivo dalla richiesta HTTP in modo da poter eseguire il debug fino a quando non si ottiene JSON (vale a dire prima di chiamare le funzioni di serializzazione).

+0

Grande che funzionava. Grazie! Ma quando sono pronto per iniziare ad aggiungere parametri tramite stringa di query, come faccio? – dherrin79

+0

Puoi aggiungere parametri all'URL, assicurati solo che l'output del tuo script sia JSON :) – abellina

+0

Vedo. Non mi ero nemmeno reso conto che il mio sito stava reindirizzando alla home page quando è stata applicata la stringa di query. Grazie per il tuo aiuto e la risposta super veloce. – dherrin79

Problemi correlati