私は解決を延期しているこの問題を抱えていましたが、今がその時です。
私は基本的な辞書プログラムを持っています。UISearchBarとUITableViewがあります。デバイスで実行している場合を除いて、キーボードラグが発生する場合を除いて、正常に動作します。(もちろん、シミュレーターは問題ありません)私には2種類の検索があります。入力時および返品時。どちらも結果を返すのにほぼ同じ時間がかかることがわかりましたが、As-you-typeを使用するとキーボードが遅れます。
searchTextを取得してすべてのsqliteリフティングを実行する検索メソッドに送信するUISearchBartextDidChangeがあり、結果を配列に入れます。テーブルをリロードします。
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText{
if((searchType == SEARCH_AS_YOU_TYPE) && ([searchText length] >= 2)){
NSString *myKeyword = [NSString stringWithFormat:@"%@", searchText];
[self search:myKeyword];
[myTableView reloadData];
}
}
結果を50に制限します。SQLクエリはLIKEとORを使用しますが、それを回避する方法はまだありません。
SELECT WORD_ID, DEFIN, PINYIN, SIMP, TRAD from WORDS where DEFIN LIKE "%to dog %" OR DEFIN LIKE "%dog" OR DEFIN LIKE "%dog%" ORDER BY DEFIN LIMIT 50
また、キーボードが少なくとも遅れないことを期待して、[myTableViewreloadData]を検索メソッドに移動してみました。喜びはありません。そして悲しいことに、sqliteがlike演算子を使用する場合、基本的にすべての行をチェックしていることを私は知っています。しかし、80行の場合は3〜4秒は少し遅いようです。
どんな考え、アイデア、コメントまたは提案も大歓迎です!