更快的方式从网站提取文本?

时间:2013-01-04 04:40:50

标签: ios concurrency xml-parsing nsstring nsscanner

我的应用解析在线XML文件。我正在尝试添加一个功能,该功能将扫描xml中每个项目的LINK以获取某些关键字,并将它们返回到NSString。我设置它时使用以下方法执行此操作:

 NSString *string = [NSString stringWithContentsOfURL:[NSURL URLWithString:articleUrl] encoding:NSUTF8StringEncoding error:nil];
            NSMutableArray *substrings = [NSMutableArray new];
            NSScanner *scanner = [NSScanner scannerWithString:string];
            [scanner scanUpToString:@"Thought:" intoString:nil]; 
            while(![scanner isAtEnd]) {
                NSString *substring = nil;
                [scanner scanString:@"Thought:" intoString:nil]; 
                if([scanner scanUpToString:@"</body>" intoString:&substring]) {

                    [substrings addObject:substring];
                }
                [scanner scanUpToString:@"Thought:" intoString:nil]; 
            }
            [substrings release];

问题是XML有很多项,这需要时间,并且TableView单元格在完成此任务之后才会出现。有没有更快的方法可以发挥作用?

1 个答案:

答案 0 :(得分:1)

更快将是非常亲密的。 (文件大小,要搜索的内容,使用的算法等...) 您可以尝试其他一些方法。 NSXMLParser是另一个。 NSRegularExpression是另一个。 首先捕获所有链接然后解析它们可能更有效。 但同样,这是一个非常笼统的陈述。

要在解析时保持UI响应,请创建NSOperation的子类并在后台使用该操作。 NSOperation子类在完成后(或者对于添加到数据结构中的每个项目)在主线程上发送通知。使您的应用程序委派(或任何适当的控制器)作为通知的观察者。您可以单独使用通知进行完成,并利用该通知提供进度指示器停止。

这为您提供了响应式UI,回调和钩子,可以使用。

进行更新