Tuesday, May 21, 2013

AFNetworking: Leer una respuesta XML en una aplicación para iPhone, con XCode

Con AFNetworking es muy fácil leer respuestas en XML o JSON que entregue un servidor.
Aquí un ejemplo con XML:

Primero deben bajar el AFNetworking a su computador desde el link:

https://github.com/AFNetworking/AFNetworking

Una vez descargada, descomprime la carpeta. Ahora contaras con una carpeta con un nombre similar (o igual) a: AFNetworking-AFNetworking-211cdfc

Ahora anda a XCode, selecciona tu proyecto, anda a Archivo y haz clic en la opción "Agregar archivo a <nombre_de_tu_proyecto>". Ahi busquen la carpeta AFNetworking-AFNetworking-211cdfc, ábranla y seleccionen la carpeta AFNetworking que está adentro.

Ya estás listo para empezar a conectarte con tu servidor.

Para empezar debes agregar los archivos al encabezado:

#import "AFXMLRequestOperation.h"
#import "AFHTTPClient.h"

Luego debes iniciar la comunicación con el servidor y obtener el XML.


        //Supongamos que deseamos enviar el mail y contraseña a nuestro servidor para obtener una respuesta cuando un usuario intenta iniciar sesión.
NSString *email = [self.txtUsername text];
        NSString *contrasena = [self.txtPassword text];
//Crea un NSDictonary con los parámetros
        NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys:
                                email, @"email",
                                contrasena, @"contrasena",
                                nil];
        
//Indica la url de tu servidor
        NSURL *url = [[NSURL alloc] initWithString:@"http://www.miservidor.com"];
        AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:url];
        [httpClient registerHTTPOperationClass:[AFXMLRequestOperation class]];
        [httpClient setDefaultHeader:@"Accept" value:@"application/xml"];
        //Indica donde se debe hacer la petición
NSMutableURLRequest *request1 = [httpClient requestWithMethod:@"POST" path:@"/iniciar_sesion" parameters:params];
        AFXMLRequestOperation *operation = [AFXMLRequestOperation XMLParserRequestOperationWithRequest:request1 success:^(NSURLRequest *request, NSHTTPURLResponse *response, NSXMLParser *XMLParser) {
            
            XMLParser.delegate = self;

//Aquí leemos la respuesta del XML
            [XMLParser parse];
        } failure:nil];

//Aquí iniciamos la llamada
        [operation start];

Ahora falta crear las funciones para parsear el archivo XML, esto se puede lograr de diferentes maneras. Aquí muestro una:
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict{
    self.currentElement = [elementName copy];
    self.ElementValue = [[NSMutableString alloc] init];
    
//Ejemplo de lectura
    if ([elementName isEqualToString:@"algun-campo"]) {    
       // hacer algo, ejemplo imprimir un mensaje...
    }
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
    [self.ElementValue appendString:string];
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
  namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
    if([elementName isEqualToString:@"algun-campo"]){
    //hacer alguna acción, por ejemplo:
    NSLog(self.ElementValue);   
    }
}

Cualquier cosa dejen un comentario!



Bookmark and Share

No comments:

Related Posts Plugin for WordPress, Blogger...