gpt4 book ai didi

ios - 使用 NSXMLParser 只解析前十个帖子,然后分别解析下一批

转载 作者:可可西里 更新时间:2023-11-01 04:31:21 26 4
gpt4 key购买 nike

我正在使用 NSXmlParser 来解析 rss 提要。到目前为止一切正常。

我预计 rss 提要最终会包含数十/数百个帖子。我当前的解决方案是读取整个 rss 提要并显示结果。但是我只想阅读前十篇文章(以防止它解析可能的数百个项目)。然后在稍后的时间(比如当用户到达表格末尾时)解析接下来的十个帖子。

所以我的问题是我将如何解析前十个帖子,然后解析接下来的十个帖子,然后接下来的十个帖子等等......

这是我用来获取所有帖子的方法:

- (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];

}

最佳答案

在与其他答案风格不同的情况下,我想指出,如果您的解析器花费这么长时间来解析 10 和 100 之间的差异是人类可测量的重要数量,那么您做错了什么。最好是:

  1. 剖析您的解析代码以找出速度变慢的地方(或找到性能更高的 XML 库)
  2. 在后台线程上解析整个批处理
  3. 只向用户显示前 10 个,
  4. 根据内存展示其余部分。

这是一个双赢,因为一次解析它可以使代码更简单,错误更少,并且一次“加载”(显示)一个 rss“页面”会快如闪电,您的用户会爱上您(请参阅Instagram 上有关伪造速度的示例)

关于ios - 使用 NSXMLParser 只解析前十个帖子,然后分别解析下一批,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11317425/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com