我需要一种正确的方法来计算具有 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/