Возможно ли использовать индивидуальную функцию (strftime) в группе по отдельности при создании NSFetchRequest в объективе-c? SQL-утверждения вполне допустимо в SQLite:Основные данные: возможно ли использовать пользовательскую функцию в группе по
select date, count(*) from note group by strftime('%Y%m%d', date)
Однако, после того, как в день рыть и пробовать различные пути и решения, я пришел к выводу, что это невозможно сделать с основными данными в одном SQL выборки. Я использую NSFetchRequest с setPropertiesToGroupBy (только для iOS 5.0).
ОБНОВЛЕНИЕ. Существует example для получения такого поведения с основными данными, предоставляемыми apple. Тем не менее, я включил «-com.apple.CoreData.SQLDebug 1» для отображения SQL, выполняемого основными данными. Похоже, основные данные не выполняют мой желаемый SQL. Он просто выбирает их всех с помощью первого запроса sql, а затем перебирает группы, выполняющие несколько запросов «SELEC .. 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.
Спасибо, попробую. Обратите внимание, что NSFetchedResultsController часто используется с делегированием, обязательным или необязательным является назначение делегата NSFetchedResultsController? Могу ли я использовать его так же, как NSFetchRequest? – Centurion
Делегат не является обязательным. См. Документацию: «Экземпляр NSFetchedResultsController использует методы в этом протоколе для уведомления своего делегата о том, что результаты выборки контроллера были изменены из-за операций добавления, удаления, перемещения или обновления. Например, в UITableView вы использовали бы его для обновить строки и раздел после изменения набора данных – Olaf