當在objective-c中製作NSFetchRequest時,是否可以在組中使用自定義函數(strftime)? SQL語句是完全有效的源碼:核心數據:是否可以在組中使用自定義函數
select date, count(*) from note group by strftime('%Y%m%d', date)
然而,挖掘和嘗試各種途徑和解決方案的一天後,我得出的結論是不可能用單一SQL獲取核心數據,來做到這一點。我正在使用NSFetchRequest和setPropertiesToGroupBy(僅適用於iOS 5.0)。
UPDATE。有一個example用於通過蘋果提供的核心數據獲得這樣的行爲。但是,我已經啓用了「-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的一個實例使用方法,在此協議通知其委託該控制器的擷取結果是由於更改爲添加,刪除,移動,或例如更新operations.'在一個UITableView你會用它來在數據集被修改後更新行和部分 – Olaf