【问题标题】:iOS: How to parse XML for real-time searchiOS:如何解析 XML 以进行实时搜索
【发布时间】:2012-08-17 21:34:56
【问题描述】:

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

【问题讨论】:

    标签: ios xml search real-time nsxmlparser


    【解决方案1】:

    您使用 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];
    

    【讨论】:

    • 谢谢大卫。我对 GCD 不熟悉。你有一点code-sn-p吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-12
    相关资源
    最近更新 更多