ios - 如何一次解析一个 RSS 提要列表?

标签 ios parsing rss

我本质上是将 RSS 提要中的项目保存到一个数组中,然后将该数组放入另一个数组中以包含它们。例如,我正在按章节保存一堆教育视频(每个章节都有一个 RSS 提要),所以我使用 MWFeedParser 使用以下逻辑一次解析它们:

for (NSString *url in videosArray) {    
        NSURL *feedURL = [NSURL URLWithString:url];
        feedParser = [[MWFeedParser alloc] initWithFeedURL:feedURL];
        feedParser.delegate = self;
        feedParser.feedParseType = ParseTypeFull;
        feedParser.connectionType = ConnectionTypeAsynchronously;
        [feedParser parse];
        }

虽然这样做了,但如果第 3 章 RSS 提要在第 2 章之前完成解析,第 3 章的内容将保存在第 2 章的位置。虽然这听起来像是一个不必要的复杂解释,但我的要求很简单:

有没有办法从提要列表中一次解析一个提要,并且在提要完全解析之前不继续,它的内容被插入到数组中?

如果有帮助,这里有 4 个可能有用的委托(delegate)方法:
- (void)feedParserDidStart:(MWFeedParser *)parser {
NSLog(@"Started Parsing: %@", parser.url);
}

- (void)feedParser:(MWFeedParser *)parser didParseFeedInfo:(MWFeedInfo *)info {
NSLog(@"Parsed Feed Info: “%@”", info.title);
self.title = info.title;
}

- (void)feedParser:(MWFeedParser *)parser didParseFeedItem:(MWFeedItem *)item {
NSLog(@"Parsed Feed Item: “%@”", item.title);
if (item) [parsedItems addObject:item];
}

- (void)feedParserDidFinish:(MWFeedParser *)parser {
NSLog(@"Finished Parsing%@", (parser.stopped ? @" (Stopped)" : @""));
[courseBeingBuilt.mediaCollection addObject:parsedItems]; // Place chapter contents into Course's Chapter w/contents array
parsedItems = [[NSMutableArray alloc] init]; // Create new array for new chapter
}

多谢你们!

最佳答案

听起来您可以跟踪 videosArray 内的索引在变量中(例如 NSUInteger currentIndex )并在 feedParserDidFinish: 中使用它方法开始解析下一个提要。

编写以下方法:

- (void) parseNextVideo
{
    NSURL *feedURL = [NSURL URLWithString:[videosArray objectAtIndex:currentIndex++]];
    feedParser = [[MWFeedParser alloc] initWithFeedURL:feedURL];
    feedParser.delegate = self;
    feedParser.feedParseType = ParseTypeFull;
    feedParser.connectionType = ConnectionTypeAsynchronously;
    [feedParser parse];
}

而不是你的for循环,只是:
currentIndex = 0;
[self parseNextVideo];

然后在 feedParserDidFinish: :
NSLog(@"Finished Parsing%@", (parser.stopped ? @" (Stopped)" : @""));
[courseBeingBuilt.mediaCollection addObject:parsedItems]; // Place chapter contents into Course's Chapter w/contents array
parsedItems = [[NSMutableArray alloc] init]; // Create new array for new chapter
if (currentIndex < videosArray.count) {
    [self parseNextVideo];
}

关于ios - 如何一次解析一个 RSS 提要列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14714889/

相关文章:

ios - 没有 dequeueReusableCellWithIdentifier 的自定义 UITableViewCell

javascript - Phonegap 中的解析查询返回错误 100 XMLHTTPRequest 失败

java - 从 Klout API 将 JSON 解析为 Java

rss - 使用 Google 新闻 RSS URL 时如何指定检索本地新闻?

java - 在java中将不同的RSS pubDate解析为Date对象

ios - 使用 RestKit 同时调用两个 webservices

ios - 使用 Asset Catalog 在 Retina 显示器上加载非 Retina 图像

c++ - 如何统计cpp文件中的所有全局变量

javascript - 简单的递归下降解析器?

wordpress - 除了 Ajax 之外,还有哪些其他方法可以将 rss 提要注入(inject)网页而不会减慢页面加载速度?