2011-07-22 22 views
0

私はテーブルビューにコアデータを使用しています。私のデータはあなたの現在の場所からの距離によって並べられます。私が望むのは、5、10、20マイルのアイテムの新しいセクションを作ることです。距離グループNSFetchedResultsControllerセクション

私の距離値はNSIntegerとしてデータストアに保存され、私はオブジェクトモデルでNSNumberを使用してそれを取得します。

私は周りを少し調べて、データを分割するためにsectionNameKeyPath属性を使用する必要があることを発見しました。

私の問題は、私はグループへの最善の方法のデータを知らないということです。私の検索の間、私は一時的な財産かNSNumberのカテゴリを使用して、項目がどのセクションに入るべきかを調べました。

これらの方法のいずれかは、もしあれば、私の最終結果を得る最良の方法ですそれを実装する方法の詳細を提供しますか?

ありがとうございました。

答えて

1

オブジェクトに派生した属性を追加する必要があります(モデルには厳密には必要ありません)。rangeとしましょう。私はそれを読み取り専用のプロパティにしたい、あなたは値をキャッシュすることができますかどうか。

それは0-5、リターン5、5.xのだ -

は、その後、あなたの sectionNameKeyPathとして rangeを設定するなど10のリターン10、。

+0

ご回答いただきありがとうございます。私はここで少しばかげている場合は申し訳ありませんが、 "派生した属性"と言うと、私のデータモデルオブジェクトの.hファイルでは、私は次のようなことをします:@property(monatomic、readonly)NSInteger * range;また、5,10、または20のいずれかを返すために独自のゲッターメソッドを作成する必要がありますか? –

+0

このメソッドは動作しますが、UIとモデルを混在させる、すばやく不潔な修正です。原則として、ビューレイヤの実装の詳細をモデルレイヤに混入させたくありません。異なる属性の範囲で定義されたセクションを持つ複数のテーブルビューがあるとどうなりますか?複数の派生アトリビュート(各テーブルビューにつき1つのアトリビュート)を作成しますか?別のアプリでデータモデルを使用する場合はどうなりますか?モデルとビューをできるだけ別々に保つことがベストプラクティスです。 – TechZen

+0

scrooby、はい。 @TechZenは合意した。しかし、FetchedResultsControllerを使用しながらこれを管理するより良い方法はありますか?私はそれについて知りたいです(正確にあなたが言う理由)。 - " - クリーンデザイン"オプションは、今すぐあなた自身のすべてのデリゲートメソッドを実装することです。FetchedResultsControllerをスローし、FetchedResultsのみを使用します。これは、 "クリーンデザイン"を得るためにはるかに多くの作業です。これが望ましい。 TechZenによると、可能性がたくさんある場合は、モデルにプッシュしたくない可能性があります。 – bshirley

0

セクションの動作を高度にカスタマイズしたい場合は、NSFetchedResultsControllerをサブクラス化して、必要な動作をさせる必要があります。詳細については、NSFetchedResultsControllerクラスのドキュメントを参照してください。

この場合、文字列属性のアルファベット順の最初の文字のような単一の順序付けられた属性ではなく、それぞれの属性が入る範囲があるため、サブクラス化する必要があります。

これは、データモデルを変更するよりも賢明な解決策です。データモデルを狂わせることなく、多くの異なるテーブルビューでさまざまな方法でデータを表示できます。

+0

NSFetchedResultsControllerをサブクラス化する良い例がありますか?アップルのドキュメントでは、どのメソッドをサブクラス化できるかについて言及しましたが、私は例を見ることができませんでした。 –

+0

申し訳ありませんが、これらは常に私が人々が多くの例を行うとは思わないほど習慣的です。私はあなたが望むものをどのように実装するのかはわかりません。私はそれについて考えてみましょう。 – TechZen