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

Ios 如何一次解析一个RSS提要列表?,ios,parsing,rss,Ios,Parsing,Rss,我本质上是将RSS提要中的项目保存到一个数组中,然后将该数组放到另一个数组中以包含所有项目。例如,我正在按章节保存一组教育视频(每个章节都有一个RSS提要),因此我使用MWFeedParser使用以下逻辑一次性解析它们: for (NSString *url in videosArray) { NSURL *feedURL = [NSURL URLWithString:url]; feedParser = [[MWFeedParser alloc] ini

我本质上是将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章的spot中。虽然这听起来可能是一个不必要的复杂解释,但我的要求很简单:

是否有任何方法可以从提要列表中一次解析一个提要,并在提要完全解析并将其内容插入数组之前不继续

如果有帮助,下面是4种可能有用的委托方法:

- (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
}

谢谢大家

不要让所有的解析器一下子松懈,而是让您的委托对象变得更智能一些:让它保留一个尚未解析的提要URL的可变数组。当您接到对
feedParserDidFinish:
的调用时,创建下一个解析器并从列表中删除其URL。如果数组中没有提要,那么就完成了


您还应该实现指示失败的委托方法,因为您可能会遇到单个提要的不可恢复错误(提要在URL处不存在)、影响所有网络操作的暂时错误(网络连接已断开)或其他一些不希望出现的情况。您需要适当地处理每一种情况。

不要让所有的解析器同时松脱,而是让您的委托对象更智能一些:让它保留一个尚未解析的提要URL的可变数组。当您接到对
feedParserDidFinish:
的调用时,创建下一个解析器并从列表中删除其URL。如果数组中没有提要,那么就完成了


您还应该实现指示失败的委托方法,因为您可能会遇到单个提要的不可恢复错误(提要在URL处不存在)、影响所有网络操作的暂时错误(网络连接已断开)或其他一些不希望出现的情况。您需要适当地处理这些情况。

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

编写以下方法:

- (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];
}
NSLog(@“已完成解析%@”,(parser.stopped?@“(stopped)”:@”);
[CourseBeingBuild.mediaCollection添加对象:parsedItems];//将章节内容放入课程的章节w/内容数组中
parsedItems=[[NSMutableArray alloc]init];//为新章节创建新数组
if(当前索引
听起来您可以跟踪变量中
videosArray
内的索引(例如,
nsuiger-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];
}
NSLog(@“已完成解析%@”,(parser.stopped?@“(stopped)”:@”);
[CourseBeingBuild.mediaCollection添加对象:parsedItems];//将章节内容放入课程的章节w/内容数组中
parsedItems=[[NSMutableArray alloc]init];//为新章节创建新数组
if(当前索引
工作起来很有魅力,我做这件事已经很久了,我都想不起来了!非常感谢你的帮助,伙计!NSOperation是否有助于加载多个NSURL?我不确定我是否理解这个问题,但它听起来比评论线程中应该回答的范围要广得多。你应该<代码>NSOperation可用于执行几乎任何任务。插入到
NSOperationQueue
中,这些任务可以一次执行一个任务,也可以一次执行多个任务,直到队列为空。所以你可以使用一个
NSOperationQueue
来加载多个URL。工作起来很有魅力,我做这件事已经很久了,以至于我都想不起来了!非常感谢你的帮助,伙计!NSOperation是否有助于加载多个NSURL?我不确定我是否理解这个问题,但它听起来比评论线程中应该回答的范围要广得多。你应该<代码>NSOperation可用于执行几乎任何任务。插入到
NSOperationQueue
中,这些任务可以一次执行一个任务,也可以一次执行多个任务,直到队列为空。因此,您可以使用
NSOperationQueue
加载多个URL。非常感谢您的帮助!非常感谢你的帮助!