0

我的应用程序解析一个在线 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 单元格直到此任务完成后才会出现。有没有更快的方法可以工作?

4

1 回答 1

1

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

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

这为您提供了响应式 UI、回调和挂钩来更新。

于 2013-01-05T02:47:27.730 回答