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 在此查询中按天对结果进行分组?

当一组相关的 Oracle 表没有时间信息时,按天对它们进行分区

iOS coredata排序描述符使用日期的一部分?

按天分组的 SQL 查询

在 django admin 中按天分组?

MySQL按天计数和分组