繁体   English   中英

iOS:如何解析XML以进行实时搜索

[英]iOS: How to parse XML for real-time search

目前我正在解析一个XML文件,就像Apple(LazyTableImages)中的示例一样。 一切正常。 我想添加一个实时搜索(UISearch),它必须解析另一个XML文件(专门为搜索编程)。 如何在不冻结屏幕的情况下解析此文件?

您在后台解析时使用GCD并调度块来执行此操作(并且可能显示一个微调器)。 您的XML解析器委托应该查看“取消”标志,因此如果用户执行命中取消或后退按钮等操作,则立即取消xml解析并允许当前操作停止。

编辑:所以你将有一个ivar来保存NSXMLParser,以及在解析完成时调用的类中的方法:

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];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM