Estoy usando NSXmlParser para analizar a través de un RSS Feed. Todo está funcionando bien hasta ahora.Use NSXMLParser para analizar solo las primeras diez publicaciones, luego analice el siguiente lote por separado
Anticipo que el feed rss eventualmente contenga docenas/cientos de publicaciones. Mi solución actual es leer todo el feed rss y mostrar los resultados. Sin embargo, solo quiero leer las primeras diez publicaciones (para evitar que analice potencialmente cientos de elementos). Luego, más adelante (por ejemplo, cuando el usuario llegue al final de la tabla) para analizar las siguientes diez publicaciones.
Así que mi pregunta es ¿cómo iba a analizar los primeros diez puestos, a continuación, analizar los próximos diez puestos, entonces los próximos diez puestos y así sucesivamente ...
Aquí es lo que estoy utilizando para obtener todos los mensajes:
- (void)parseXMLFileAtURL:(NSString *)URL
{
myArray = [[NSMutableArray alloc] init];
//convert the path to a proper NSURL or it won't work
NSURL *xmlURL = [NSURL URLWithString:URL];
rssParser = [[NSXMLParser alloc] initWithContentsOfURL:xmlURL];
[rssParser setDelegate:self];
[rssParser parse];
}
- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError {
//error
}
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{
currentElement = [elementName copy];
if ([elementName isEqualToString:@"item"]) {
//clear out our story item caches...
item = [[NSMutableDictionary alloc] init];
}
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{
if ([elementName isEqualToString:@"item"]) {
// save values to an item, then store that item into the array...
}
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
// save the characters for the current item...
}
- (void)parserDidEndDocument:(NSXMLParser *)parser {
[myTable reloadData];
}
Supongo que esto causará problemas de rendimiento al analizar la segunda mitad de xml, de lo contrario, será correcto analizarlo todo en un solo paso –
@MarkPervovskiy No sé por qué esto podría causar problemas de rendimiento: ¿podría aclarar? – Ben
El análisis de XML es una operación lenta, y puede tomar cualquier cantidad de tiempo, especialmente cuando xml contiene "cientos de mensajes". Por lo tanto, su solución lleva a analizar primero las 10 publicaciones, luego las primeras 20, luego las primeras 30 y así sucesivamente. En un momento, el usuario verá cómo se congela su yo durante medio segundo. –