Además de mi otra respuesta, que utiliza algunas clases de ayuda y supone que estás almacenando cosas con Core Data, aquí hay una forma pura de NSXMLParser para hacerlo.
En este ejemplo asumo que tiene tres UIImageViews configuradas con etiquetas (100,101,102) para que podamos acceder a ellas. En primer lugar, el código que inicia el programa de análisis:
// Set the URL with the images, and escape it for creating NSURL
NSString *rssURLString = @"http://feeds.gettyimages.com/channels/RecentEditorialEntertainment.rss";
NSString *escapedURL = [rssURLString stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding];
NSURL *rssURL = [NSURL URLWithString:escapedURL];
// rssParser is an NSXMLParser instance variable
if (rssParser) [rssParser release];
rssParser = [[NSXMLParser alloc] initWithContentsOfURL:rssURL];
[rssParser setDelegate:self];
success = [rssParser parse]; // return value not used
En este punto el análisis se inicia y se NSXMLParser disparar las llamadas a la misma de los métodos de delegado a medida que encuentra diferentes elementos de inicio y fin en el XML.
En este ejemplo yo sólo escribo el método didStartElement
:
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
// look for an attribute called url
if ([attributeDict objectForKey:@"url"]) {
currentString = [attributeDict objectForKey:@"url"];
NSLog(@"Image URL: %@", currentString);
NSString* escapedURL = [currentString stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding];
UIImage *image = [[UIImage alloc] initWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:escapedURL]]];
UIImageView * tmpImageView = (UIImageView*)[scrollView viewWithTag:100+imageCount];
[tmpImageView setImage:image];
NSLog(@"images found: %d", imageCount);
imageCount++;
if (imageCount>2) [rssParser abortParsing];
}
}
Aquí miramos para ver si el attributeDict (un objeto NSDictionary) contiene un atributo url. Si es así, lo tomamos en currentString y luego lo escapamos, solo en caso de que tenga caracteres en los que NSURL barf on. Luego creamos una imagen a partir de esa URL y establecemos la imagen UIImageView apropiada en función de los números de las etiquetas. imageCount es un contador; una vez que hemos hecho tres imágenes, le decimos a NSXMLParser que aborte el análisis del XML.
Si el código XML pone la URL dentro de etiquetas de elementos como:
<image>http://example.com/image.jpg</image>
Tendrá que hacer un poco más trabajo con didEndElement
y foundCharacters
. Vea el excelente Introduction to Event-Driven XML Programming Guide for Cocoa.
Reuní una aplicación rápida y sucia para probar esto, puedes tomarlo here.
Las URL son dinámicas, ya que estoy usando feedburner, esto funcionará con "cualquier" RSS feed? ¡Gracias! –
No estoy seguro de lo que quiere decir con 'las URL son dinámicas'. pero esto debería funcionar para cualquier documento xml, siempre que haya una etiqueta en el documento xml para identificar las URL de la imagen. – Remover
Con esto quiero decir que todas las imágenes están alojadas en diferentes lugares ... –