2016-06-30 10 views
0

私はCore Dataに触れてからしばらくしていましたが、今ではアプリケーションを動かそうとしています。データはサーバーからJSONとしてダウンロードされ、いくつかのフラットファイルとして保存されます。コアデータの採用、いくつかの基準によるフィルタリング。 NSPredicateが欲しいですか?

ユーザーがアプリケーションとやり取りするとき、特定の画面(数百のエントリ)のデータセット全体を一度にメモリに読み込みます。ユーザーは、自分の距離でレコードをフィルタリングすることができます(私の場合、会場です)。

ユーザーは、Venue管理対象オブジェクトのいくつかの他のプロパティでフィルタリングすることも、検索語を入力することもできます。

私はこれらのフィルタをすべて組み合わせて、ユーザーがデータを検索、並べ替え、参照できるようにしたいと考えています。私はメモリ内のNSArrayを使ってこれらのすべてのことを行うコードを書いていますが、パフォーマンスは良くありません。

ここでNSPredicateを使用したいですか?私はNSManagedObjectのプロパティでフィルタリングするためにそれを使うことができると知っていますが、ユーザからの会場の距離など、より過渡的な属性については、これがどのように機能するかわかりません。

コアデータでこれを達成するための一般的な手順は何ですか?

+1

あなたはそのjsonでいくつかのフィールドリターンを共有できますか?私はあなたが距離計算を実行すると思うので、距離がない座標を持つ会場のリストであると仮定します。 – xmhafiz

答えて

0

NSPredicateがフィルタリング基準の大部分を必要としていることが判明しましたが、それをスライスしてもCore Dataは場所によって並べ替えることができません。

アルファベット順のフィルタリングはNSFetchedResultsControllerで行うことができ、また、 "type"のプロパティと検索語句でフィルタリングすることもできます。

Core DataはSQLステートメントにコンパイルできるソート記述子を必要とするため、インターネット上の別の場所で述べたように、ブロックベースのNSSortDescriptorは必要な処理を行いません。さらに、Core DataはSQLの位置計算方法を知らない。

1

限り距離とコアデータとして:

ストア緯度と長い独立して、ユーザーを中心とするその「四角」ですべてを照会し、検索半径(別名、四角の内側の半径円は)内部に収まること

は、手動でメモリ内のコーナーで結果を出し投げ

限り、総クエリとして:あなたの述語でのいくつかのルールが不思議

+0

私は場所によってのみフィルタリングするのではなく、コアの位置で距離を計算できます。また、すべての項目を最も近い順に並べる必要がありますので、これで問題は解決しません。 – Moshe

+0

電話での簡潔さに関する謝罪:NSSortDescriptorは注文に役立ちます – Michael

0

私は地理的なクエリに四分木を使用することを行います。アレイをスキャンするよりもはるかに高速です。私のコードはWikipedia entry on Quadtreesから派生しています。 MKMapViewに4分木を使用することに関するいくつかのブログ記事があります。 NSPredicateはコアデータ固有のフィルタではありません。任意のNSArrayに適用できます。あなたのデータセットが数百ポイントの大きさであれば、あなたのループよりも速く実行されるでしょう。

関連する問題