4

アプリで Google 検索のオートコンプリートを機能させようとしていますが、問題が発生しました。私は a を使用していますが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 に答える