我的应用解析在线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单元格在完成此任务之后才会出现。有没有更快的方法可以发挥作用?
答案 0 :(得分:1)
更快将是非常亲密的。 (文件大小,要搜索的内容,使用的算法等...) 您可以尝试其他一些方法。 NSXMLParser是另一个。 NSRegularExpression是另一个。 首先捕获所有链接然后解析它们可能更有效。 但同样,这是一个非常笼统的陈述。
要在解析时保持UI响应,请创建NSOperation的子类并在后台使用该操作。 NSOperation子类在完成后(或者对于添加到数据结构中的每个项目)在主线程上发送通知。使您的应用程序委派(或任何适当的控制器)作为通知的观察者。您可以单独使用通知进行完成,并利用该通知提供进度指示器停止。
这为您提供了响应式UI,回调和钩子,可以使用。
进行更新