Objective-C で NSFetchRequest を作成するときに、グループごとにカスタム関数 (strftime) を使用することは可能ですか? SQL ステートメントは sqlite で完全に有効です。
select date, count(*) from note group by strftime('%Y%m%d', date)
ただし、さまざまな方法と解決策を掘り下げて試した1日の後、単一のSQLフェッチでコアデータを使用してそれを行うことは不可能であるという結論に達しました。setPropertiesToGroupBy で NSFetchRequest を使用しています (iOS 5.0 のみ)。
アップデート。アップルが提供するコアデータを使用してこのような動作を取得する例があります。ただし、コア データによって実行される SQL を表示するために「-com.apple.CoreData.SQLDebug 1」を有効にしました。コア データが目的の SQL を実行していないようです。最初のSQLクエリでそれらをすべて選択し、複数の「SELECT .. WHERE ID IN ....」SQLクエリを実行してグループをループします。コンソールからの抜粋:
2012-07-05 10:34:57.244 DateSectionTitles[1139:fb03] CoreData: sql: SELECT 0, t0.Z_PK FROM ZEVENT t0 ORDER BY t0.ZTIMESTAMP
2012-07-05 10:34:57.245 DateSectionTitles[1139:fb03] CoreData: annotation: sql connection fetch time: 0.0010s
2012-07-05 10:34:57.246 DateSectionTitles[1139:fb03] CoreData: annotation: total fetch execution time: 0.0015s for 52 rows.
2012-07-05 10:34:57.247 DateSectionTitles[1139:fb03] CoreData: sql: SELECT 0, t0.Z_PK, t0.Z_OPT, t0.ZTIMESTAMP, t0.ZTITLE FROM ZEVENT t0 WHERE t0.Z_PK IN (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ORDER BY t0.ZTIMESTAMP LIMIT 20
2012-07-05 10:34:57.248 DateSectionTitles[1139:fb03] CoreData: annotation: sql connection fetch time: 0.0012s
2012-07-05 10:34:57.249 DateSectionTitles[1139:fb03] CoreData: annotation: total fetch execution time: 0.0022s for 20 rows.
2012-07-05 10:34:57.250 DateSectionTitles[1139:fb03] CoreData: sql: SELECT 0, t0.Z_PK, t0.Z_OPT, t0.ZTIMESTAMP, t0.ZTITLE FROM ZEVENT t0 WHERE t0.Z_PK IN (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ORDER BY t0.ZTIMESTAMP LIMIT 20
2012-07-05 10:34:57.281 DateSectionTitles[1139:fb03] CoreData: annotation: sql connection fetch time: 0.0303s
2012-07-05 10:34:57.281 DateSectionTitles[1139:fb03] CoreData: annotation: total fetch execution time: 0.0310s for 20 rows.