В дополнение к моему другому ответу, который использует некоторые вспомогательные классы и вроде бы предполагает, что вы храните вещи с Core Data, вот чистый NSXMLParser способ сделать это.
В этом примере я предполагаю, что у вас есть три UIImageViews с тегами (100,101,102), чтобы мы могли получить к ним доступ. Во-первых, код, который запускает парсер:
// 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
На этом этапе синтаксический анализ начинается, и NSXMLParser запускает вызовы к его методам делегата, поскольку он находит различные начальные и конечные элементы в XML.
В этом примере я пишу только метод 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];
}
}
Здесь мы посмотрим, содержит ли attributeDict (объект NSDictionary) атрибут url. Если это так, мы берем его в currentString, а затем экранируем его, просто добавляем в него символы, которые NSURL будет использовать. Затем мы создаем изображение из этого URL и устанавливаем соответствующее изображение UIImageView на основе номеров тегов. imageCount - счетчик; как только мы сделали три изображения, мы сообщаем NSXMLParser прервать синтаксический анализ XML.
Если ваш XML помещает URL-адрес в теги элемента, например:
<image>http://example.com/image.jpg</image>
Вам нужно будет немного больше поработать с didEndElement
и foundCharacters
. См. Превосходное Введение в управляемое событиями XML-руководство по программированию для какао .
Я собрал быстрое и грязное приложение для демонстрации этого, вы можете взять его здесь .