-3

高速検索を実装したいとします。ユーザーがいくつかの文字を入力すると、文字が変わるたびに、プログラムがネットを検索して検索候補を表示します。

ただし、その関数が 3 秒以上頻繁に呼び出されることは望ましくありません。

どうすればいいですか?

現在タイマーを使用しています。また、オートコンプリートのネットの「検索」はバックグラウンドで実行されるため、マルチスレッドの問題が発生します。

すぐにコードを投稿します。しかし、ほとんどの答えは私のものと似ています。

複雑なのは、ユーザーの入力が速すぎる場合でも、3 秒後にグラブを実行する必要があることです。すぐにではありませんが、まだ完了しています。

4

3 に答える 3

2

新しい文字を検出したら、経過時間を確認してください。

NSDate *d = [NSDate date];

if( lastSearch == nil || [d timeIntervalSinceDate:lastSearch] > 3 )
{
    lastSearch = d;

    // Do your search ...

}

.h ファイルで次のように宣言lastSearchします。

NSDate *lastSearch;
于 2012-06-03T10:39:09.417 に答える
1

タイマーを作成して、検索文字列の更新を確認できます。みたいな

timer = [NSTimer timerWithTimeInterval:3.f target:self selector:@selector(update) userInfo:nil repeats:YES];

次に、更新メソッドを実装するだけです

-(void) update
{
    BOOL needToSearch = // check if there was changes in your search string
    if ( needToSearch )
    {
        // make new search
    }
}

必要のないときはタイマーを無効にしすぎることを忘れないでください

于 2012-06-03T10:48:55.080 に答える
0

タイマーが切れると検索が実行されるように設定しますが、ユーザーが文字を入力するたびにタイマーを遅延量にリセットします。

于 2012-06-07T17:31:10.750 に答える