ios - 如何计算 CoreData 对象的唯一日期?

标签 ios core-data count nsdate nsmanagedobject

我需要一种正确的方法来计算具有 NSDate 类型属性的 CoreData 对象中有多少个独特的日子。

例如,我有以下内容:

<Object>.date = "2014-05-15 21:29:12 +0000";
<Object>.date = "2014-05-15 21:49:34 +0000";
<Object>.date = "2014-05-16 13:29:23 +0000";
<Object>.date = "2014-05-16 20:49:50 +0000";
<Object>.date = "2014-05-16 22:01:53 +0000";
<Object>.date = "2014-05-20 03:32:12 +0000";
<Object>.date = "2014-05-20 12:45:23 +0000";
<Object>.date = "2014-05-20 14:15:50 +0000";
<Object>.date = "2014-05-20 20:20:05 +0000";

在这种情况下,结果必须是 3,因为有 3 个不同的日子,2014-05-15、2014-05-16 和 2014-05-20

有什么办法可以解决这个问题? 我尝试使用 NSPredicate 但没有成功

谢谢!

最佳答案

这很简单。让我向您展示我将为此做些什么。

使用排序描述键对结果进行分组。这个例子可以帮助你理解它是如何实现的。

https://developer.apple.com/library/ios/samplecode/DateSectionTitles/Introduction/Intro.html

然后只计算这些组。

编辑:

NSDate+Utils.h

- (NSDate *) dateWithoutTime

NSDate+Utils.m

-(NSDate *) dateWithoutTime
{
    NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    NSDateComponents *components = [calendar components:NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit fromDate:self];
    return [calendar dateFromComponents:components];
}

一些文件

- (NSUInteger) someObjectsCount
{
    NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"SomeObject"];

    NSString *key = @"date.dateWithoutTime";

    fetchRequest.sortDescriptors = @[[[NSSortDescriptor alloc] initWithKey:key
                                                                 ascending:YES]];

    NSManagedObjectContext *context;
    context = [(AppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext];

    NSFetchedResultsController *aFetchedResultsController;
    aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
                                                                    managedObjectContext:context
                                                                      sectionNameKeyPath:key
                                                                               cacheName:nil];
    [aFetchedResultsController performFetch:nil];

    return [[aFetchedResultsController sections] count];
}

就是这样!

关于ios - 如何计算 CoreData 对象的唯一日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23704906/

相关文章:

ios - 线程 1 : signal SIGABRT error on Obj C

ios - 从 NSMutableArray 创建字节数组

iphone - iOS内存问题

ios - 啊!试图重置核心数据。每隔两次工作?

ios - 将上下文保存到核心数据后,可以撤消操作吗?

ios - 使用 RxAlamofire 创建包含网络请求结果的 Observable

ios - 使用核心数据完全不相关的错误

mysql - 计算数据包含在多个列中的列的总和

sql - Oracle 模式表行数

count - JPA/JPQL COUNT 问题