j'ai écrit ce code pour faire une requête HTTP à un serveur qui envoie à moi une chaîne JSON:NSURLSession (iOS 10) Réponse de coupe à partir d'un serveur
-(NSDictionary*)doRequestWithCommand:(NSString*)command andBody:(NSString*)requestBody {
__block NSDictionary *result = nil;
NSURL *URL = [NSURL URLWithString: [NSString stringWithFormat:@"%@%@", PREFIX_URL, command] ];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:URL
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:60.0];
[request setHTTPMethod:REQUEST_TYPE_POST];
[request setHTTPBody:[requestBody dataUsingEncoding:NSUTF8StringEncoding]];
dispatch_semaphore_t sem = dispatch_semaphore_create(0);
__block BOOL done = NO;
while (!done) {
NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if (data != nil) {
result = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
NSLog(@"%@", [[NSString alloc] initWithData:data encoding:4]);
NSLog(@"len %lu", [[[NSString alloc] initWithData:data encoding:4] length]);
done = YES;
}
dispatch_semaphore_signal(sem);
}];
[dataTask resume];
dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER);
}
return result;
}
Ce code fonctionne très bien avec iOS 9 et inférieur , mais avec iOS 10 non! Pratiquement la réponse du serveur est coupée 1610ème caractère!
Je ne sais pas ce qui se passe! Pouvez-vous m'aider?
Merci
Vous devez examiner l'objet d'erreur renvoyé par 'dataTaskWithRequest'. Est-ce que c'est «nul»? En outre, vous devez capturer l'objet d'erreur retourné par 'JSONObjectWithData' et voir si c'est« nil »ou non. Chaque fois que le code ne fonctionne pas, la première chose à faire est de commencer à examiner les objets d'erreur. – Rob
La référence 'result' est-elle' nil'? Si 'nil', je suspecterais un problème dans la réponse JSON du serveur. Créez-vous ce fichier JSON manuellement ou utilisez-vous l'API pour le créer pour vous? Encore une fois, s'il y a un problème, l'objet d'erreur retourné par 'JSONObjectWithData' vous dira ce qui, si quelque chose, est faux avec le JSON. – Rob
L'erreur est nulle! Et la réponse (résultat) n'est pas nulle, mais est coupée d'iOS. La réponse est générée à partir du serveur et est complète et correcte! Si j'essaye de faire une demande d'un client de repos, la réponse est correcte et non coupée, donc le problème est iOS, mais je ne sais pas ce que c'est! – frank