Convertir NSData en NSSsortingng – Limitation NSLog

NSData convertir NSData en NSSsortingng dans Zendesk mais NSData une string incomplète, ou au less pas capable de décoder complètement les data .

Quand je curl la command suivante:

 curl https://mySubdomain.zendesk.com/api/v2/users/1038194884/tickets/requested.json -v -u myLogin:myPassword 

Je reçois la réponse correcte et list tous les tickets de cet user, la réponse est la suivante:

<HTTP / 1.1 200 OK <Serveur: nginx <Date: Sam, 28 Jan 2017 19:50:16 GMT <Content-Type: application / json; charset = UTF-8 <Content-Length: 12576 <login: keep-alive <Version-X-Zendesk-API: v2 <Version-X-Zendesk-Application: v8.28 <X-Frame-Options: SAMEORIGIN <X- Limite de débit: 400 <X-Rate-Limit-Restant: 399 <Sécurité-Transport-Sécurité: max-age = 31536000; <Compatible X-UA: IE = Edge, chrome = 1 <ETag: "98b10cfcb2f1577122a1662926f9565c" <Cache-Control: doit-revalider, private, max-age = 0 <Serveur X-Zendesk-Origin: app2.pod7.fra1 <X-Requête-Id: db8b90fd-e3a3-452d-c5ea-ecf4bbd76e89 <X-Runtime: 0.303978 <X-Rack-Cache: mademoiselle <X-Zendesk-ID de la request: bdfd524aa5520cf39e57 <X-Content-Type -Options: nosniff

Lorsque j'essaie de faire la même chose dans l' objective-C , à partir de l'application iOS , la réponse est à peu près la même, comme suit:

"Cache-Control" = "doit-revalider, privé, max-age = 0"; login = "keep-alive"; "Content-Encoding" = gzip; "Content-Type" = "application / json; jeu de caractères = UTF-8"; Date = "Sam, 28 Jan 2017 20:36:38 GMT"; Etag = "\" 98b10cfcb2f1577122a1662926f9565c \ ""; Serveur = nginx; "Ssortingct-Transport-Security" = "âge-max = 31536000;"; "Transfer-Encoding" = Identité; "X-Content-Type-Options" = nosniff; "X-Frame-Options" = SAMEORIGIN; "X-Rack-Cache" = manquer; "X-Rate-Limit" = 400; "X-Rate-Limit-Restant" = 399; "X-Request-Id" = "53c1b462-2dec-4c46-cc60-ecf4bbd76e89"; "X-Runtime" = "0.209525"; "Compatible X-UA" = "IE = Edge, chrome = 1"; "X-Zendesk-API-Version" = v2; "X-Zendesk-Application-Version" = "v8.28"; "Serveur X-Zendesk-Origin" = "app4.pod7.fra1.zdsys.com"; "X-Zendesk-Request-Id" = 675ae5b4ff78fbe7

Le problème est que si j'essaie de convertir les data dans un dictionary ou NSSsortingng , j'obtiens une ssortingng incomplète. C'est le code que j'utilise:

 NSSsortingng *urlUser = [NSSsortingng ssortingngWithFormat:@"https://mySubdomain.zendesk.com/api/v2/users/1038194884/tickets/requested.json"]; NSURL *url = [[NSURL alloc] initWithSsortingng:urlUser]; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; [request addValue : @"application/json" forHTTPHeaderField : @"Content-Type" ]; NSSsortingng *authStr = @"username:password"; NSData *authData = [authStr dataUsingEncoding:NSUTF8SsortingngEncoding]; NSSsortingng *authValue = [NSSsortingng ssortingngWithFormat: @"Basic %@",[authData base64EncodedSsortingngWithOptions:0]]; [request setValue:authValue forHTTPHeaderField:@"Authorization"]; NSURLSession *session = [NSURLSession sharedSession]; NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler: ^(NSData *data, NSURLResponse *response, NSError *error) { NSLog(@"finished"); if (!error) { NSLog(@"%@", data); NSLog(@"RESPONSE: %@", response); NSLog(@"length: %lu", data.length); //Determine if ssortingng is null-terminated char lastByte; [data getBytes:&lastByte range:NSMakeRange([data length]-1, 1)]; NSSsortingng *str; if (lastByte == 0x0) { //ssortingng is null-terminated str = [NSSsortingng ssortingngWithUTF8Ssortingng:[data bytes]]; } else { //ssortingng is not null-terminated str = [[NSSsortingng alloc] initWithData:data encoding:NSUTF8SsortingngEncoding]; } NSLog(@"ssortingng length: %lu", str.length); NSLog(@"%@", str); NSLog(@"stop"); } }]; [task resume]; 

BTW, la longueur des data est la même que dans la réponse curl .

string enregistrée:

{"tickets": [{"url": " https://mySubdomain.zendesk.com/api/v2/tickets/407.json ", "id": 407, "external_id": null, "via": { "channel": "mobile_sdk", "source": {"from": {}, "à": {}, "rel": "mobile_sdk"}}, "created_at": "2017-01-26T10: 48: 28Z "," updated_at ":" 2017-01-26T11: 05: 42Z "," type ": null," sujet ":" Comentário sobre exercício. "," Raw_subject ":" Comentário sobre exercício. "," Description " : "Nome do usuário: bruna villete \ Objet: qHQzNbjUzy \ nPlano: Formation de fer – Brésil \ DETALHES DO EXERCICIO: \ nTitulo: CADEIRA EXTENSORA \ nObjectId: qvq5deXxD9 \ nPerfil: MULHER INICIANTE \ nFrequência: 5 \ nPeríodo: Semana1 \ nSérie : Série B \ n \ nCOMENTÁRIO: \ nbom "," priorité ": null," statut ":" résolu "," destinataire ": null," identifiant_requéreur ": 1038194884," expéditeur ": 1038194884," identifiant ": 3030446965, "organization_id": null, "id_groupe": 24989965, "collaborator_ids": [], "id_topique": null, "id_projet": null, "has_incidents": false, "is_public": true, "due_at": null, " tags ": [" seriecomment "]," custom_fields ": []," satisfaction_rating ": null," partage _accord_

Comme je vous l'ai dit dans les commentaires, il semble que l'instruction NSLog coupe la string. tout fonctionne comme prévu.

pour travailler avec vos données, convertissez-le en object JSON et utilisez-le comme ceci:

 // convert the response data to json NSError *error = nil; NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error]; if (!error) { NSLog(@"json parsing succeeded."); } // access your data NSArray *tickets = json[@"tickets"]; 

Convertir d'abord la réponse JSON à NSDictionary

Ensuite, accédez à votre NSSsortingng à partir du dictionary comme d'habitude. (Ou toute autre valeur / key dans votre réponse JSON)

 NSSsortingng *myStr = [json objectForKey:@"someKey"];