2011-10-03 3 views
8

Sto usando AFNetworking e sto creando una richiesta di posta per la quale richiedo feedback di JSON. Il codice qui sotto funziona comunque ho due domande principali; dove posso rilasciare ActivityIndicator Manager? La seconda domanda è questo codice corretto, essendo nuovo mi confondo con i blocchi quindi voglio davvero sapere se sto facendo la cosa giusta per prestazioni ottimali, anche se funziona.AFNetworking Post Request con json feedback

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");  


}  

La ringrazio molto per il vostro aiuto in anticipo :)

+0

Da dove viene il 'AFJSONRequestOperation operationWithRequest: Successo: finitura:' metodo vieni? Non lo vedo nell'API. –

+0

@reakinator In realtà dice '+ JSONRequestOperationWithRequest: success: failure:' Vedere l'esempio [qui] (https://github.com/AFNetworking/AFNetworking#readme). – borisdiakur

risposta

2

perché non utilizzare questo, invece?

[[AFNetworkActivityIndicatorManager sharedManager] setEnabled:YES]; 

Quindi non c'è bisogno di alloc e init

non posso dire molto sugli altri codici, appena iniziato l'apprendimento Objective-C e AFNetworking .. :)

Saluti, Steve0hh

8

So che questa domanda è un po 'vecchia, ma volevo comunque contribuire.

Come già detto, è necessario utilizzare [[AFNetworkActivityIndicatorManager sharedManager] setEnabled:YES] per attivare l'indicatore della rete di attività. È un singleton e quindi non richiede di allocare manualmente init e release. Per quanto riguarda l'altra domanda, ho notato vi manca alcuni parametri nelle chiamate di blocco, inoltre, è possibile fare questo, che è il codice molto più pulito:

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

Ciao, ho usato il tuo codice ma sono sempre nel blocco di errori :(mi manca qualcosa? – Luca

+0

@Malek Controlla che il tuo URL sia corretto, ti raccomando NSLoggiare il 'NSError' dal blocco errori e vedere l'output. – ArturoVM

+0

@ Malek Se ancora non riesci a individuare il problema, apri una nuova domanda con l'output di NSLog e saremo lieti di aiutarti – ArturoVM