2011-10-03 3 views
8

J'utilise AFNetworking et créer une demande de publication pour laquelle j'ai besoin de feedback json. Le code ci-dessous fonctionne mais j'ai deux questions principales; Où puis-je libérer le gestionnaire ActivityIndicator? La deuxième question est ce code correct, étant nouveau je suis confondu avec des blocs, donc je veux vraiment savoir si je le fais bien pour une performance optimale, même si cela fonctionne.Demande AFNetworking Post avec des commentaires json

NSURL *url = [NSURL URLWithString:@"mysite/user/signup"]; 
    AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:url]; 

    AFNetworkActivityIndicatorManager * newactivity = [[AFNetworkActivityIndicatorManager alloc] init]; 
    newactivity.enabled = YES; 
    NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys: 
          usernamestring, @"login[username]", 
          emailstring, @"login[email]", 
          nil]; 
    NSMutableURLRequest *request = [httpClient requestWithMethod:@"POST" path:@"mysite/user/signup"parameters:params]; 
    [httpClient release]; 

    AFJSONRequestOperation *operation = [AFJSONRequestOperation operationWithRequest:request success:^(id json) { 

     NSString *status = [json valueForKey:@"status"]; 
     if ([status isEqualToString:@"success"]) { 
      [username resignFirstResponder]; 
      [email resignFirstResponder]; 
      [self.navigationController dismissModalViewControllerAnimated:NO]; 
     } 
     else { 
      UIAlertView *alert =[[UIAlertView alloc] initWithTitle:@"Login Unsuccessful" 
                  message:@"Please try again" 
                  delegate:NULL 
               cancelButtonTitle:@"OK" 
               otherButtonTitles:NULL]; 

      [alert show]; 
      [alert release]; 
     } 

    } 

    failure:^(NSHTTPURLResponse *response, NSError *error) { 

    NSLog(@"%@", error); 
    UIAlertView *alert =[[UIAlertView alloc] initWithTitle:@"Login Unsuccessful" 
                 message:@"There was a problem connecting to the network!" 
                 delegate:NULL 
              cancelButtonTitle:@"OK" 
              otherButtonTitles:NULL]; 

     [alert show]; 
     [alert release]; 


    }]; 

    NSOperationQueue *queue = [[[NSOperationQueue alloc] init] autorelease]; 
    [queue addOperation:operation]; 
    NSLog(@"check");  


}  

Merci beaucoup pour votre aide à l'avance :)

+0

D'où vient le 'AFJSONRequestOperation operationWithRequest: sucess: finition:' méthode viens de? Je ne le vois pas dans l'API. –

+0

@reakinator Il est en fait '+ JSONRequestOperationWithRequest: succès: échec:' Voir l'exemple [ici] (https://github.com/AFNetworking/AFNetworking#readme). – borisdiakur

Répondre

2

Pourquoi ne pas utiliser ce lieu?

[[AFNetworkActivityIndicatorManager sharedManager] setEnabled:YES]; 

Par conséquent, il n'y a pas besoin de alloc et init

Ne peut pas dire grand-chose sur les autres codes, vient de commencer à apprendre Objective-C et AFNetworking .. :)

Cordialement, Steve0hh

8

Je sais que cette question est un peu ancienne, mais je voulais quand même contribuer. Comme steveOhh l'a dit, vous devez utiliser [[AFNetworkActivityIndicatorManager sharedManager] setEnabled:YES] pour activer l'indicateur de réseau d'activité. C'est un singleton, et par conséquent il ne vous oblige pas à allouer et à libérer manuellement. Quant à l'autre question, je remarque que vous manque certains paramètres dans vos appels de blocs, aussi, vous pouvez le faire, ce qui est un code beaucoup plus propre:

NSURL *url = [NSURL URLWithString:@"mysite/user/signup"]; 
AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:[NSURLRequest requestWithURL:url] success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) { 
    // your success code here 
} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) { 
    // your failure code here 
}]; 

[operation start]; // start your operation directly, unless you really need to use a queue 
+0

Bonjour, j'ai utilisé votre code, mais je suis toujours dans le bloc de panne :(ai-je manqué quelque chose? – Luca

+0

@Malek Vérifiez que votre URL est correcte, je recommande NSLogging le 'NSError' du bloc de défaillance et voir la sortie – ArturoVM

+0

@ Malek Si vous ne pouvez toujours pas identifier le problème, ouvrez une nouvelle question avec la sortie de ce NSLog et je serai heureux de vous aider – ArturoVM