iPhone CoreData:如何按天对获取的结果进行分组?
Posted
技术标签:
【中文标题】iPhone CoreData:如何按天对获取的结果进行分组?【英文标题】:iPhone CoreData: How to group fetched results by day? 【发布时间】:2010-06-14 13:48:17 【问题描述】:我正在使用 CoreData 开发 iPhone 应用程序。我的一个实体有一个名为“时间”的 NSDate 属性。它将时间存储到分钟/秒。作为我的部分,我想知道当天的日期。因此,如果有条目“2010-06-14 8:00”和“2010-06-14 11:00”,我希望将它们分组到“2010-06-14”。
目前我只是使用 @"time" 作为我的 sectionNameKeyPath:
NSFetchedResultsController *aFetchedResultsController =
[[NSFetchedResultsController alloc]
initWithFetchRequest:fetchRequest
managedObjectContext:managedObjectContext
sectionNameKeyPath:@"time"
cacheName:@"Root"];
按时间分组有什么诀窍吗?还是我必须使用普通 SQL 之类的“GROUP BY date(time, '%Y-%m-%d')
”?
【问题讨论】:
【参考方案1】:这样解决了:
向我的实体类添加了方法- (NSString *)day;
,实现如下:
- (NSString *)day
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
dateFormatter.dateStyle = NSDateFormatterFullStyle;
return [dateFormatter stringFromDate:self.time];
然后我在aFetchedResultsController
的初始化中使用@"day"
作为sectionNameKeyPath
而不是@"time"
(见上文)。
【讨论】:
只是想知道:为什么不返回带有self.time.components.day
的字符串?
当您为实体重新生成 NSManagedObject
子类时,覆盖的 getter 是否也不会消失?
@Matt 通常这样的方法将在实体的类别中,以避免该问题。以上是关于iPhone CoreData:如何按天对获取的结果进行分组?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 SQL Server 在此查询中按天对结果进行分组?