(Ceci est encore moi) Je suis désolé si cela est plutôt vague, mais je crois que je peux donner un exemple de code. J'essaie de faire en sorte que le programme arrête l'analyse après 10 articles sont analysés, affiche ces 10, puis continue l'analyse et affiche un autre 10 si un bouton suivant est pressé.
Dans le parser.m, je l'ai écrit:
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *) namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{
currentElement = [elementName copy];
if ([elementName isEqualToString:@"item"]) {
item = [[NSMutableDictionary alloc] init];
self.currentTitle = [[NSMutableString alloc] init];
self.currentDate = [[NSMutableString alloc] init];
self.currentSummary = [[NSMutableString alloc] init];
self.currentLink = [[NSMutableString alloc] init];
self.currentImage = [[NSMutableString alloc] init];
}//IF END
//podcast url is an attribute of the element enclosure
if ([currentElement isEqualToString:@"enclosure"]) {
[currentImage appendString:[attributeDict objectForKey:@"url"]];
NSLog(@"Image = %@", currentImage);
}//IF END
else if([currentElement isEqualToString:@"img"]){
[currentImage appendString:[attributeDict objectForKey:@"src"]];
NSLog(@"Image = %@", currentImage);
}//ELSE IF END
}
J'ai aussi la section didEndElement et caractères trouvés:
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *) namespaceURI qualifiedName:(NSString *)qName{
if ([elementName isEqualToString:@"item"]) {
[item setObject:self.currentTitle forKey:@"title"];
[item setObject:self.currentLink forKey:@"link"];
[item setObject:self.currentSummary forKey:@"summary"];
[item setObject:self.currentImage forKey:@"image"];
// Parse date here
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setFormatterBehavior:NSDateFormatterBehavior10_4];
[dateFormatter setDateFormat:@"EEE, d MMM yyyy"]; // Thu, 18 Jun 2010 04:48:09 -0700
NSLog(@"FC date1 = %@", self.currentDate);
NSDate *date = [[NSDate alloc] init];
date = [dateFormatter dateFromString:currentDate];
NSLog(@"FC date2 = %@", date);
[item setObject:self.currentDate forKey:@"date"];
//[item setObject:date forKey:@"date"];
[date release];
[items addObject:[item copy]];
NSLog(@"Item details = %@", items);
[count addObject:[item objectForKey:@"title"]];
NSLog(@"count = %@", count);
}//IF END
}
Je aussi eu quelques problèmes avec le formatage de la date, mais c'est un problème mineur.
aussi:
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
if ([currentElement isEqualToString:@"title"]) {
[self.currentTitle appendString:string];
} else if ([currentElement isEqualToString:@"link"]) {
[self.currentLink appendString:string];
} else if ([currentElement isEqualToString:@"image"]) {
[self.currentImage appendString:string];
} else if ([currentElement isEqualToString:@"description"]) {
[self.currentSummary appendString:string];
} else if ([currentElement isEqualToString:@"pubDate"]) {
[self.currentDate appendString:string];
NSCharacterSet* charsToTrim = [NSCharacterSet characterSetWithCharactersInString:@" \n"];
[self.currentDate setString: [self.currentDate stringByTrimmingCharactersInSet: charsToTrim]];
}//IF-ELSE-IF END
}
Je vous serais très reconnaissant si quelqu'un pouvait me donner une astuce sur ce qu'il faut faire pour mettre en pause le programme ... ou me permettre d'analyser en groupes de 10 ...Je n'arrive pas ;_;
Nous vous remercions de votre temps.