6

Core Data にいくつかの場所を含むアプリケーションがあり、ユーザーの場所に近い順にそれらをユーザーに表示したいと考えています。NSFetchedResultsController を使用して、場所をテーブル ビューに提供しています。「グローバル」CoreLocationManagerを使用して計算される、ユーザーからの場所の距離を返す仮想アクセサーメソッドを作成することを考えましたが、理由でクラッシュします:

キャッチされていない例外 'NSInvalidArgumentException' が原因でアプリを終了しています。理由: 'keypath distanceFromCurrentLocation がエンティティ < NSSQLEntity Location id=4> に見つかりません'

また、アルファベット順にソートするオプションをユーザーに提供するので、可能であれば、NSFetchedResultsController を保持することをお勧めします。

どうすればいいですか?

ありがとう!

4

3 に答える 3

3

NSFetchedResultsController の問題 (または不足している機能) は、並べ替え順序とセクション キー パスに一時的な属性を使用する機能が不足していることです。

私もこれに苦労したので、これに興味があるかもしれません:

NSFetchedResultsController セクションのローカライズされたソート

限られたレコードのセットを保証できる場合は、このアプローチも使用できると確信しています。しかし、私はより洗練されたソリューションを見たいと思っています。

于 2010-05-05T06:08:28.867 に答える
1

同じことをして、場所からの距離で結果を並べ替えようとしました。これが私の質問の1つです:

コアデータとコアロケーション

それらを比較するには、すべての場所をメモリにロードする必要があることが判明しました。私はSQLiteを使用することになりました。これは実装がより困難ですが、この種の関数の頭痛の種ははるかに少なくなりました。

それはおそらくあなたが望む答えではありませんが、あなたが大きなデータセットを持っているなら、私はSQLiteをお勧めします。結局、私にとってはより速く、より簡単に対処できるようになりました。

于 2010-04-19T17:12:22.713 に答える
1

エンティティに一時的な属性が定義されていない限り、コア データでは仮想アクセサーは機能しません。NSFetchedResultsController (および他のすべての Core Data 操作) は、操作を実行する前にエンティティのグラフを調べます。仮想プロパティがエンティティ定義に表示されない場合、NSFetchedResultsController はそのような属性が存在しないことを報告します。

名前を持つエンティティで一時的な属性を定義したいdistanceFromCurrentLocation場合、仮想アクセサーを記述して、NSFetchedResultsController にそれを表示させることができるはずです。

于 2010-04-19T17:02:41.690 に答える