単純なことのように思えるものを達成するために、私は数時間苦労してきました。
NSDate属性を持つエンティティAがあります。
私の目標は、NSDate属性のMM / YYYYで定義されたセクションにグループ化しながら、すべてのAオブジェクトを一覧表示するUITableViewを構築することです。
私はこのアップルの公式サンプルを見つけました:http://developer.apple.com/library/ios/#samplecode/DateSectionTitles/Introduction/Intro.html
それで:
- エンティティAの新しい一時オプション属性「sectionTitleMonth」を作成しました
- 新しい動的プロパティ(primitiveDateとprimitiveSectionTitleMonth)を定義し、公式サンプルのようにそれらのセッターとkeyPathsForValuesAffectingSectionTitleMonthを実装しました。
モデルクラスを再生成するたびにすべてが消去されることを望まなかったため、この新しいコードをクラスカテゴリ(A +非生成)に移動することにしました。
その後、テーブルビューデリゲートを更新して、
- サンプルとまったく同じようにNSFetchedResultsControllerを構築します。一時的な属性をsectionNameKeyPathとして使用するようになりました
- 公式サンプルのようにセクション関連のメソッドを定義します
2つのポイントから、このソリューションが適切かどうか疑問に思います。
1)SQLLiteバックエンドでsectionNameKeyPathとして一時的な属性を使用しています。大丈夫ですか ?一時的な属性+SQLLiteは良い友達ではなかったとどこかで読んだことがありますが、どちらの場合か思い出せません
2)クラスカテゴリA + nonGeneratedでプロパティ(primitiveDateとprimitiveSectionTitleMonth)を定義しています。大丈夫ですか ?公式ドキュメントに記載されているように、「ただし、カテゴリを使用してインスタンス変数をクラスに追加することはできません」。しかし、ここではプロパティは動的であり、コアデータはAを生成するときに関連するインスタンス変数を生成するので、正常に機能するはずです...しかし、まだ少し疑問があります:)
すべてがうまくいくようですが...それは良い解決策ですか?つまり、私の目標を達成するためのより簡単でより良い方法はありますか?
私を慰めるか、より良い解決策を教えてください:o)