Question

Je suis sûr de ne pas être nouveau dans la programmation iOS, mais j'ai des problèmes avec AFNetworking. Plus précisément, lorsque je l'utilise, rien ne se passe. Je ne reçois aucune réponse du serveur, mais je n'obtiens également aucune erreur. Toutes les propriétés finissent par NULL.

Voici ma demande:

NSMutableDictionary *requestArray = [NSMutableDictionary new];
[requestArray setObject: @"getBio"
                 forKey: @"action"];
[requestArray setObject: @"1"
                 forKey: @"bioID"];

NSError * error = nil;

NSData *jsonData = [NSJSONSerialization dataWithJSONObject:requestArray options:0 error:&error];

NSString *myRequestString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];

NSMutableURLRequest *request = [ [ NSMutableURLRequest alloc ] initWithURL: [ NSURL URLWithString: @"http://localhost/LP/JSON/Secure/bio.php" ] ]; 

[ request setHTTPMethod: @"POST" ];
[ request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"content-type"];
[ request setHTTPBody: [myRequestString dataUsingEncoding:NSUTF8StringEncoding]];

Cela semble fonctionner car j'obtiens mon résultat attendu si je transmets simplement la requête dans un UIWebView ou si j'utilise ceci:

NSURLResponse *response;
NSError *err;
NSData *returnData = [ NSURLConnection sendSynchronousRequest: request returningResponse:&response error:&err];
NSString *content = [NSString stringWithUTF8String:[returnData bytes]];
NSLog(@"responseData: %@", content);

En d'autres termes, le POST réussit et JSON est renvoyé.

Mais rien de tout cela ne fait quoi que ce soit (aucune erreur, aucune réponse):

AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
    NSLog(@"Data: %@ %@", [JSON valueForKeyPath:@"firstName"], [JSON valueForKeyPath:@"lastName"]);
} failure:nil];

Même les os nus ne fonctionnent pas non plus:

AFURLConnectionOperation *operation = [[AFURLConnectionOperation alloc] initWithRequest:request];

De toute évidence, je fais quelque chose d'horriblement mal. Mais, les échecs silencieux rendent cela difficile à comprendre.

Merci pour toute aide.

MODIFIER:

Nevermind .. Je suis dense.

Ne créait pas NSOperationQueue.

NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[queue addOperation:operation];

Cependant, je ne sais toujours pas pourquoi les propriétés ne sont pas définies. Mais il semble que j'ai au moins des données.

Était-ce utile?

La solution

La création de l'objet d'opération de requête ne lance pas automatiquement la requête.Comme vous l'avez souligné dans votre modification, c'est à vous de le mettre en file d'attente dans un NSOperationQueue ou de faire [operation start] manuellement.

Je vous recommande de communiquer avec votre serveur en utilisant AFHTTPClient, car cela fournit un mécanisme intégré pour définir correctement votre chaîne de requête ou votre corps HTTP en fonction des paramètres que vous passez. Voir l'exemple de client de l'API Gowalla dans l'exemple de code, et la méthode AFHTTPClient -postPath:parameters:success:failure.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top