ios objective-c json cocoa-touch afnetworking-2

ios - (Error de cacao 3840.) "(Valor no válido alrededor del carácter 0) AFNetworking



objective-c json (3)

A juzgar por la discusión en los comentarios, parece que su solicitud GET es exitosa (código de respuesta 200), pero el cuerpo de la respuesta no es JSON válido (ni un fragmento JSON) como lo solicitó al usar AFJSONResponseSerializer . Se puede usar un AFHTTPResponseSerializer básico para respuestas que no son JSON.

He estado recibiendo el siguiente error al usar el método GET para recuperar un archivo de un servidor:

Error: Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)" (Invalid value around character 0.) UserInfo=0x16e81ed0 {NSDebugDescription=Invalid value around character 0.}

He intentado varias cosas diferentes y creo que podría ser algo que ver con el formato JSON en el archivo que estoy tratando de obtener.

Aquí está el código que he estado usando:

_username = @"JonDoe"; NSDictionary *parameters = @{ @"username" : _username}; AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; manager.responseSerializer = [AFJSONResponseSerializer serializerWithReadingOptions:NSJSONReadingAllowFragments]; manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/plain"]; [manager GET:@"http://.........." parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) { NSLog(@"JSON: %@", responseObject); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"Error: %@", error); }];

Mi método POST funciona bien. Parece que no puedo solucionar este problema con el GET. ¿Algunas ideas? Gracias.


Estoy bastante seguro de que tiene una respuesta válida del servidor, pero su respuesta no es un formato válido en JSON, probablemente porque tiene carachters delante de la primera {. Intente esto: coloque manualmente la misma dirección URL en su navegador y verá al culpable en la respuesta. Espero que haya ayudado.


Hola, esto es lo que encontré como mi problema: estaba llamando a Alamofire a través de una función para autenticar a los usuarios: usé la función "Iniciar sesión de usuario" Con los parámetros que se llamarían desde el "cuerpo" (correo electrónico: Cadena, contraseña: Cadena) Eso sería pasado

mi error fue exactamente

opcional (alamofire.aferror.responseserializationfailed (alamofire.aferror.responsesialialfailurereason.jsonserializationfailed (error domain = nscocoaerrordomain code = 3840 "valor no válido alrededor del carácter 0" usuario info = {nsdebugdescription = valor inválido alrededor del carácter 0

el carácter 0 es la clave aquí: lo que significa que la llamada para el "correo electrónico" no coincide con los parámetros: consulte el código a continuación

func loginUser (email: String, contraseña: String, completado: @escaping downloadComplete) {let lowerCasedEmail = email.lowercased ()

let header = [ "Content-Type" : "application/json; charset=utf-8" ] let body: [String: Any] = [ "email": lowerCasedEmail, "password": password ] Alamofire.request(LOGIN_USER, method: .post, parameters: body, encoding: JSONEncoding.default, headers: header).responseJSON { (response) in if response.result.error == nil { if let data = response.result.value as? Dictionary<String, AnyObject> { if let email = data["user"] as? String { self.userEmail = email print(self.userEmail) } if let token = data["token"] as? String { self.token_Key = token print(self.token_Key) }

"correo electrónico" en los parámetros de la función debe coincidir con el "correo electrónico" al analizar, entonces funcionará. Ya no recibí el error ... Y el carácter 0 era el "correo electrónico" en el parámetro "cuerpo" para la solicitud de Alamofire:

Espero que esto ayude