2011-10-26 11 views
0

コアデータのより複雑な部分はかなり新しいです。一時的な計算値に基づいてコアデータストアを照会

私のアプリケーションには、15K行のコアデータストアがあります。単一のエンティティが存在します。

計算された検索条件でフィルタリングされたテーブルビューにこれらの行のサブセットを表示する必要があります。また、表示される行ごとにリアルタイムで計算する値を追加します。

計算では、ユーザーが指定した2つの値を使用する必要があります。

仮説例:

エンティティ: "第一"、フィールド "ID" を含み、 "第二"

ユーザ入力:10と20

検索/フィルタ条件:表示のみレコードエンティティフィールド「id」は、2つの供給された数の間の素数である。

表示:基準に合致するすべてのレコードのすべてのフィールドと、派生フィールド(コアデータエンティティにはない)の合計です。 「ID」フィールドと乱数、SO 4つのフィールド含有するであろうテーブルビュー内の各行の:

「ID」、「第一」、「第二」を/私の読み取りから付加価値

を-calculatedグーグルでは、一時的なプロパティがあると思われるが、検索条件とその結果のプロパティをユーザー入力に基づいて計算する必要があるため、これを行う方法を考えることができない。

誰でも私にこのコードを実装するのに役立つポインタを教えてください。私は今はかなり失われています。私が本の中で見つけることができる例は、自分の特定のニーズに合っていません。

ありがとう

ダレン。

答えて

1

最初にする必要があるのは、実際にコアデータに含まれていない構造体なので、フィールド、行、列の考え方を止めることです。この場合、Core Dataは任意の複雑なフェッチをサポートしていますが、sqliteストアはサポートしていないため重要です。したがって、sqliteストアを使用すると、フェッチはSQLiteでサポートされているものに制限されます。

この場合、SQLiteを対象とする述語は、属性値がプライムであるかどうかを計算するなどの複雑な操作を実行できません。あなたの最初のケースのための

最善の解決策は、isPrimeのブール属性を追加し、その後セットID値が素数であるかどうかを計算し、それに応じてisPrimeを設定するために、あなたのid属性のセッターを変更することであろう。これはSQLiteストアに格納され、たとえばSQLiteストアドプロシージャからフェッチできます。 isPrime==YES &&((first<=%@) && (second>=%@))

2番目のケースでは、管理対象オブジェクトがメモリ内にあるときにカスタムゲッターを使用してその値を計算するための一時プロパティを使用します。

よく見落とされるオプションの1つは、sqliteストアを使用せず、代わりにXMLストアを使用することです。データの量が比較的小さい場合、例えば、数千のテキスト属性と総メモリ容量が数十メガになると、XMLストアは超高速でより複雑な操作を処理できます。

SQLiteは、Core Dataの踏み台の踏み台です。それは大規模なデータセットと低メモリが、メモリがいっそう豊富になり、そのエッジが失われるのに役立ちます。私は最近、それを使用していないことが分かりました。この特別な場合にsqliteが必要かどうかを検討する必要があります。

関連する問題