2011-10-03 18 views
8

Estoy utilizando AFNetworking y estoy creando una solicitud posterior para la que necesito información json. El siguiente código funciona, sin embargo, tengo dos preguntas principales; ¿Dónde lanzo el ActivityIndicator Manager? La segunda pregunta es si este código es correcto, dado que soy nuevo, me confunden los bloques, así que realmente quiero saber si lo estoy haciendo bien para un rendimiento óptimo, aunque funciona.Solicitud de publicación de AFNetworking con comentarios de 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");  


}  

Muchas gracias por su ayuda de antemano :)

+0

dónde viene el 'AFJSONRequestOperation operationWithRequest: éxito: Acabado:' Método ¿viene de? No lo veo en la API. –

+0

@reakinator En realidad mencionó '+ JSONRequestOperationWithRequest: success: failure:' Vea el ejemplo [aquí] (https://github.com/AFNetworking/AFNetworking#readme). – borisdiakur

Respuesta

2

por qué no utilizar esto en su lugar?

[[AFNetworkActivityIndicatorManager sharedManager] setEnabled:YES]; 

Por lo tanto no hay necesidad de alloc e init

No puedo decir mucho sobre los otros códigos, acaba de comenzar a cabo el aprendizaje de Objective-C y AFNetworking .. :)

Saludos, Steve0hh

8

Sé que esta pregunta es un poco antigua, pero aún así quería contribuir.

Como dijo steveOhh, debe usar [[AFNetworkActivityIndicatorManager sharedManager] setEnabled:YES] para activar el indicador de red de actividad. Es un singleton, y por lo tanto no requiere que manualmente alloc-init y release. En cuanto a la otra pregunta, me di cuenta de que faltan algunos parámetros en sus llamadas de bloques, también, puede hacer esto, que es el código mucho más limpio:

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

Hola, he usado tu código pero siempre he estado en el bloque de fallas :(¿me falta algo? – Luca

+0

@Malek Comprueba que tu URL sea correcta, recomiendo NSLogging el 'NSError' del bloque de fallas y mira el resultado. – ArturoVM

+0

@ Malek Si todavía no puede identificar el problema, abra una nueva pregunta con la salida de ese NSLog y estaré encantado de poder ayudarlo. – ArturoVM

Cuestiones relacionadas