Resultados de análisis JSON iOS 5 en Cocoa Error 3840
xcode ios5.1 (4)
Me había topado con un problema similar. Mi analizador JSON funciona intermitentemente cuando descargo los datos JSON de un servidor. ¿Obtuviste tus datos JSON de esta función?
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
Los NSData devueltos desde esta función podrían ser datos parciales. Necesita anexarData a una variable de instancia con tipo: NSMutableData. Luego, procesa su JSON en otra función de la siguiente manera:
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
Leyendo este artículo para más detalles. Esto funciona para mi
Me está costando analizar la cadena JSON siguiente en iOS 5.
{"States": [{"Name": "Arizona","Cities": [{"Name": "Phoenix"}]},{"Name": "California","Cities": [{"Name": "Orange County"},{"Name": "Riverside"},{"Name": "San Diego"},{"Name": "San Francisco"}]},{"Name": "Nevada","Cities": [{"Name": "Las Vegas"}]}]}
Y aquí está mi código:
- (void) parseJson {
NSError *jsonError = nil;
NSData *jsonData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Locations-JSON" ofType:@"rtf"]];
if (jsonData) {
NSDictionary *jsonObjects = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&jsonError];
if (jsonError) {
NSLog(@"JSON Error: %@", [jsonError localizedDescription]);
return;
}
NSLog(@"%@", jsonObjects);
}
}
Sigo recibiendo este error:
JSON Error: The operation couldn''t be completed. (Cocoa error 3840.)
Agradecería algo de ayuda en esto porque claramente e incapaz de arreglar esto.
Pude solucionar mi error JSON 3840 convirtiendo el objeto NSData
en un NSString
:
NSError *error;
NSObject *object = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error];
if (object == nil) {
NSString *serverResponse = [[NSString alloc] initWithData:responseData encoding:NSASCIIStringEncoding];
NSLog(@"/n/nError:/n%@/n/nServer Response:/n%@/n/nCrash:", error.description, serverResponse);
[NSException raise:@"Invalid Data" format:@"Unable to process web server response."];
}
Si llegó aquí debido a la JSON y no por el RTF, lea esta respuesta: IOS JSON Deserialization failure - STIG / NSJSONSerializer
Una cosa que me parece incorrecta es esta:
[[NSBundle mainBundle] pathForResource:@"Locations-JSON" ofType:@"rtf"]
¿Tus datos son un archivo RTF? Debe ser un archivo txt
(o cualquier otro tipo de archivo de texto sin formato). Los archivos RTF generalmente contienen datos de formato de texto, como este:
{/rtf1/ansi/ansicpg1252/cocoartf1138/cocoasubrtf470
{/fonttbl/f0/fswiss/fcharset0 Helvetica;}
{/colortbl;/red255/green255/blue255;}
/margl1440/margr1440/vieww10800/viewh8400/viewkind0
/pard/tx720/tx1440/tx2160/tx2880/tx3600/tx4320/tx5040/tx5760/tx6480/tx7200/tx7920/tx8640/pardirnatural
/f0/fs24 /cf0 /{"States": [/{"Name": "Arizona","Cities": [/{"Name": "Phoenix"/}]/},/{"Name": "California","Cities": [/{"Name": "Orange County"/},/{"Name": "Riverside"/},/{"Name": "San Diego"/},/{"Name": "San Francisco"/}]/},/{"Name": "Nevada","Cities": [/{"Name": "Las Vegas"/}]/}]/}}
Cuando lo leo como datos y trato de analizarlo como JSON, obtengo el error 3840 que está viendo. La descripción de ese error dice:
No se pudieron leer los datos porque se han dañado. (Sin clave de cadena para el valor en el objeto alrededor del carácter 2)
Entonces, lo que me parece es que en realidad no tienes JSON. Tienes datos RTF.