検索を高速化するためにコアデータに関するドキュメントを読んでいました。私は、次を発見し、それが何を意味するのかに関してはやや混乱していた:コアデータとの特定のやりとりを保存する
SQLストアに、一方で、 はSQLに述語とソート 記述子をコンパイルし、データベース自体に 結果を評価します。この時 はるかに高速です。これは パフォーマンス・データベースに対して主に行わ である(それは彼らが のために設計されているものです) - ブタそれが評価 が非ココア環境で起こることを意味し、 ので、記述子(または 述語を並べ替えます)ココアに頼るのは の仕事はできません。サポートされているソートセレクタは compare:とcaseInsensitiveCompare:です。 さらに、 SQLiteストアを使用して、 を一時プロパティでソートすることはできません。
これは、彼らが1は、述語を使用するか、sqliteのストアから管理対象オブジェクトを取得する際の記述子をソートしないことをお勧めしていることを意味していますか?
私は現在、私は次のように合格FetchRequestを持っている:
NSPredicate *thingSearchPredicate =
[NSPredicate predicateWithFormat:@"label BEGINSWITH[cd] %@", searchText];
NSSortDescriptor *sortDescriptor =
[[NSSortDescriptor alloc] initWithKey:@"label" ascending:YES];
検索は動作しますが、私は、私はココアに依存している述語を使用していと思います。 BEGINSWITH私は比較を想定しています:options:range:shorthand rangeは検索文字列の長さです。事実は分音敏感ではありません。間違いなく、上記のアドバイスに反するように見えます。それは、そのエンティティのすべてのインスタンスが取得された後、自動的に評価されるということです。
検索を高速化する方法はありますか?
いいえ、NSSQLiteStoreを使って述語やソート記述子を使用できないというわけではありません。他のストアで動作する可能性のある*特定の*述語とソート記述子は、SQLLiteでは機能しません格納。 基本的に、それらをSQLステートメントにコンパイルできる必要があります。 BEGINSWITH [cd]はSQLで簡単に表現できます。 – Hunter