2009-08-04 8 views
0

検索を高速化するためにコアデータに関するドキュメントを読んでいました。私は、次を発見し、それが何を意味するのかに関してはやや混乱していた:コアデータとの特定のやりとりを保存する

SQLストアに、一方で、 はSQLに述語とソート 記述子をコンパイルし、データベース自体に 結果を評価します。この時 はるかに高速です。これは パフォーマンス・データベースに対して主に行わ である(それは彼らが のために設計されているものです) - ブタそれが評価 が非ココア環境で起こることを意味し、 ので、記述子(または 述語を並べ替えます)ココアに頼るのは の仕事はできません。サポートされているソートセレクタは compare:とcaseInsensitiveCompare:です。 さらに、 SQLiteストアを使用して、 を一時プロパティでソートすることはできません。

the documentation is here

これは、彼らが1は、述語を使用するか、sqliteのストアから管理対象オブジェクトを取得する際の記述子をソートしないことをお勧めしていることを意味していますか?

私は現在、私は次のように合格FetchRequestを持っている:

NSPredicate *thingSearchPredicate = 
[NSPredicate predicateWithFormat:@"label BEGINSWITH[cd] %@", searchText]; 
    NSSortDescriptor *sortDescriptor = 
[[NSSortDescriptor alloc] initWithKey:@"label" ascending:YES]; 

検索は動作しますが、私は、私はココアに依存している述語を使用していと思います。 BEGINSWITH私は比較を想定しています:options:range:shorthand rangeは検索文字列の長さです。事実は分音敏感ではありません。間違いなく、上記のアドバイスに反するように見えます。それは、そのエンティティのすべてのインスタンスが取得された後、自動的に評価されるということです。

検索を高速化する方法はありますか?

+1

いいえ、NSSQLiteStoreを使って述語やソート記述子を使用できないというわけではありません。他のストアで動作する可能性のある*特定の*述語とソート記述子は、SQLLiteでは機能しません格納。 基本的に、それらをSQLステートメントにコンパイルできる必要があります。 BEGINSWITH [cd]はSQLで簡単に表現できます。 – Hunter

答えて

0

コアデータがSQLでクエリを表現できない場合は、エラーが表示されます。ドキュメントでは、パフォーマンス上の理由から、式を取得してSQLに変換してsqlliteに渡すことを指定しています。それがSQLで表現できないなら、それはCocoaに縮退しません。

意味があるのは確かです。述語はSQLで表現できないので、まったく動作しません。

また、ソートセレクタを使用する必要があり、ココアのSQLへの任意のオブジェクトをどのように秘密にするかわからないため、独自にソートセレクタを作成することはできません。

関連する問題