example ios objective-c json afnetworking

ios - example - Error de dominio=NSCocoaErrorDomain Code=3840 "No se pudo completar la operación utilizando AFNetworking



afnetworking example (3)

Estoy usando la biblioteca AFNetworking para publicar datos en el servidor usando el método POST.

Siguiente es mi codigo

- (void) callLoginAPI:(NSDictionary *)dictProfile{ // 1 NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys:[dictProfile valueForKey:@"name"], @"username", [dictProfile valueForKey:@"first_name"],@"first_name", [dictProfile valueForKey:@"last_name"],@"last_name", [dictProfile valueForKey:@"email"],@"email", [dictProfile valueForKey:@"birthday"],@"dob", [dictProfile valueForKey:@"gender"],@"gender", [[dictProfile valueForKey:@"location"] valueForKey:@"name"],@"location", [dictProfile valueForKey:@"timezone"],@"timezone", @"",@"language", [NSString stringWithFormat:@"http://graph.facebook.com/%@/picture?type=large",[dictProfile valueForKey:@"id"]],@"profile_pic_url", @"",@"cover_pic_url",nil]; AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; manager.requestSerializer = [AFJSONRequestSerializer serializer]; [manager POST:@"http://10.1.81.35:8000/api/login/" parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) { NSLog(@"JSON: %@", responseObject); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"Error: %@", error); }]; }

pero tengo el siguiente error en respuesta

Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)" (JSON text did not start with array or object and option to allow fragments not set.) UserInfo=0x797f2620 {NSDebugDescription=JSON text did not start with array or object and option to allow fragments not set.}

No entiendo cuál es el problema con el código.


El problema viene de la respuesta de análisis. Está intentando des-serializar una respuesta JSON (que DEBE estar contenida en un NSArray o un NSDictionary ) sin embargo, su respuesta no es ninguna de las anteriores (lo más probable es que sea una cadena simple).

Además, intente configurar "permitir fragmentos" en el serializador de respuesta.

AFJSONResponseSerializer *responseSerializer = [AFJSONResponseSerializer serializerWithReadingOptions:NSJSONReadingAllowFragments];


Puede ser que necesite autenticación para acceder a la respuesta JSON . Establecer la autenticación de esa manera:

[manager.requestSerializer setAuthorizationHeaderFieldWithUsername:@"XYZ" password:@"xyzzzz"];

Prueba esto:

AFJSONResponseSerializer *responseSerializer = [AFJSONResponseSerializer serializerWithReadingOptions:NSJSONReadingAllowFragments]; [self setResponseSerializer:responseSerializer];

en lugar de:

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; manager.requestSerializer = [AFJSONRequestSerializer serializer];


AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc]initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]]; //Request Serializer manager.requestSerializer = [AFJSONRequestSerializer serializer]; //Response Serializer AFJSONResponseSerializer *responseSerializer = [AFJSONResponseSerializer serializerWithReadingOptions:NSJSONReadingAllowFragments]; manager.responseSerializer = responseSerializer;