4

我正在尝试让 Google 搜索自动完成功能在我的应用程序中运行,但我遇到了一些麻烦。我正在使用UISearchBar它的textDidChange委托方法来这样做。当文本发生变化时,我NSXmlParser会读取这样的 XML 文件:

<toplevel>
<CompleteSuggestion>
<suggestion data="searchterms"/>
<num_queries int="13400000"/>
</CompleteSuggestion>
<CompleteSuggestion>
<suggestion data="searchterms twitter"/>
<num_queries int="52500000"/>
</CompleteSuggestion>
</toplevel>

http://suggestqueries.google.com/complete/search?client=toolbar&q=SEARCHTERM

其中 SEARCHTERM 将是 UISearchBar 文本。这将返回一个 XML 文件,然后我将使用它解析该文件以找到建议的术语

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict

但我不太确定该怎么做。

4

1 回答 1

3

一般的想法是有一个searchSuggestions可变的数组属性。在该parserDidStartDocument:方法中,确保将其初始化为一个新的空数组 - 类似于self.searchSuggestions = [NSMutableArray array];.

然后,在您的 didStartElement 委托方法中,执行此操作以获取每个建议的项目。

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict {
    if ([elementName isEqualToString:@"suggestion"]) {
        NSString *suggestion = attributeDict[@"data"];
        [self.searchSuggestions addObject:suggestion];
    }
}

一旦你得到你的parserDidEndDocument:委托回调,确保做任何你需要做的事情来显示它——这取决于你的解析器委托是什么对象。如果你的解析器的委托是一个表格视图控制器,你可以重新加载表格。如果它是某个请求对象,您可以回调请求的委托、执行完成块或发布通知。

于 2013-03-03T03:18:09.787 回答