objective c - Error de cacao 3840 con JSON(iOS)
objective-c cocoa-touch (3)
A menos que pase la opción NSJSONReadingAllowFragments
a [NSJSONSerialization JSONObjectWithData:options:error:]
la respuesta del servidor debe ser JSON válida con un contenedor de nivel superior que es una matriz o un diccionario.
por ejemplo:
{ "response" : "Success" }
PD Si desea un diccionario mutable, también debe incluir NSJSONReadingMutableContainers
en sus opciones.
Estoy tratando de enviar datos a un servidor y recibir la respuesta en formato JSON. El problema es que el servidor debe devolver "éxito" o "error" pero devuelve "(nulo)".
Aquí está el error devuelto:
Error Domain = NSCocoaErrorDomain Code = 3840 "No se pudo completar la operación. (Cocoa error 3840.)" (El texto JSON no comenzó con la matriz u objeto y la opción para permitir que no se establezcan los fragmentos). UserInfo = XXXXXXXXX {NSDebugDescription = JSON text no comenzó con matriz u objeto ni opción para permitir que no se establezcan fragmentos.}
¿Es posible que el error esté en el script del servidor?
Aquí está mi función para enviar los datos y recibir la respuesta:
- (void) putData:(NSString *)parameter valor:(NSString *)valor {
NSString *rawString = [NSString stringWithFormat:@"%@=%@", parameter, valor];
NSData *data = [rawString dataUsingEncoding:NSUTF8StringEncoding];
NSURL *url = [NSURL URLWithString:@"http://www.xxx.xxx/xxx.php"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"PUT"];
[request setHTTPBody:data];
NSURLResponse *response;
NSError *error;
NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
NSMutableDictionary *json = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error];
NSLog(@"responseData: %@ error: %@", json, error);
}
Es posible que, la respuesta de su servidor no contenga JSON válido.
Técnicamente, el objeto JSON debe comenzar con una "matriz" o un "objeto (diccionario)".
Entonces, lo que sea que devuelva tu servidor no lo es.
Y puede forzar que el JSON se consuma independientemente utilizando la opción NSJSONReadingAllowFragments.
mediante el uso ,
AFJSONResponseSerializer *responseSerializer = [AFJSONResponseSerializer serializerWithReadingOptions:NSJSONReadingAllowFragments];
Puede obtener este problema si está conectado a VPN en su dispositivo iOS.