iOS:如何解析XML进行实时搜索
现在,我正在解析一个XML文件,就像来自Apple的示例(LazyTableImages)。一切正常。我想添加一个实时搜索(UISearch),它必须解析另一个XML文件(专门为搜索编程)。如何在不冻结屏幕的情况下解析此文件?在后台解析时,使用GCD并分派一个块来完成此操作(可能会显示微调器)。您的XML解析器委托应该看到一个“cancel”标志,因此如果用户执行类似于单击cancel或back按钮的操作,您将立即取消XML解析并允许当前操作停止 编辑:因此您将有一个ivar来保存NSXMLParser,并且在您的类中有一个在解析完成时调用的方法:iOS:如何解析XML进行实时搜索,ios,xml,search,real-time,nsxmlparser,Ios,Xml,Search,Real Time,Nsxmlparser,现在,我正在解析一个XML文件,就像来自Apple的示例(LazyTableImages)。一切正常。我想添加一个实时搜索(UISearch),它必须解析另一个XML文件(专门为搜索编程)。如何在不冻结屏幕的情况下解析此文件?在后台解析时,使用GCD并分派一个块来完成此操作(可能会显示微调器)。您的XML解析器委托应该看到一个“cancel”标志,因此如果用户执行类似于单击cancel或back按钮的操作,您将立即取消XML解析并允许当前操作停止 编辑:因此您将有一个ivar来保存NSXMLPa
NSXMLParser *parser;
NSString *searchTerm;
id results; // some mutable collection that the parser stores things into
- (void)parseFinished:(id)result; // result can be an array or dictionary, whatever you want
when the user has entered some text and you want to search:
searchTerm = ....; // set it
parser = [NSXMLParser alloc] init....];
parsedItems = ....
dispatch_async(dispatch_get_global_queue(0,0), ^
{
BOOL ret = [parser parse];
id myResultObject;
if(ret == YES) {
// your delegate methods have populated parsedItems now
search through them using searchTerm
create and fill in myresultObject, some collection/string/number whatever
}
// nil myResultObject means that parser failed
dispatch_async(dispatch_get_main_queue(), ^[self parseFinished:myResultObject];} );
} );
如果用户类型为cancel(假设XML对象很大,解析需要很多秒),那么您只需在action方法中发送
[parser abortParsing];
谢谢你,大卫。我不熟悉GCD。你有一点代码片段吗?