带有 NSdate 谓词的 NSFetchrequest

Posted

技术标签:

【中文标题】带有 NSdate 谓词的 NSFetchrequest【英文标题】:NSFetchrequest with NSdate predicate 【发布时间】:2013-08-26 08:10:05 【问题描述】:

我有一个entity,其中包含具有NSDate (format yyyy-MM-dd) 的对象现在我想做一个fetch request,只包含今天具有NSDate 的对象。所以我正在做以下事情。

 NSDate *now = [NSDate new];
   RKManagedObjectStore *store = [[DominoDataModel sharedDataModel] objectStore];
    NSManagedObjectContext *context = store.mainQueueManagedObjectContext;

    NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Event"];
    NSPredicate *predicate = [NSPredicate predicateWithFormat:
                              @"eve_date = %@",now];
    fetchRequest.predicate = predicate;
    NSSortDescriptor *descriptor = [NSSortDescriptor sortDescriptorWithKey:@"eve_date" ascending:YES];
    fetchRequest.sortDescriptors = @[descriptor];
    NSArray *matches = [context executeFetchRequest:fetchRequest error:nil];
    arrConcerten = [matches mutableCopy];
    NSLog(@"matches %@",matches);

我的NSLog 总是不返回匹配项。

有人可以帮我吗?

编辑

我的实体包含这样的 NSDates:

2013/08/29
2013/08/30
2013/09/02
2013/09/15
2013/09/28

我以为我可以将这些 NSDate 与今天的日期进行比较?但这可能不起作用,因为我实体中的 NSDates 没有时间戳

【问题讨论】:

没有“格式”的NSDateeve_date 属性中的值究竟是什么? 这不是(几乎)与您上一个问题***.com/questions/18332769/…中的问题相同吗? - 你必须与“一天的开始”和“第二天的开始”进行比较。 @CarlVeazey 我已经编辑了我的问题 这看起来不像是格式化日期字符串的NSDate。当您查看底层持久存储时,您会发现什么值?或者,您如何在代码中填充这些日期? 【参考方案1】:

您的日期是一个时间戳,其中还包含秒等。您需要的是“介于”谓词。

NSPredicate *subPredFrom = [NSPredicate predicateWithFormat:@"eve_date >= %@ ", dateFrom];
[subpredicates addObject:subPredTo];

NSPredicate *subPredTo = [NSPredicate predicateWithFormat:@"eve_date < %@", dateTo];
[subpredicates addObject:subPredFrom];

其中 dateTo 是第二天 00:00 而 dateFrom 是请求的一天 00:00 ;) 要得到这个,你必须使用 NSDateComponents

NSDateComponents *components = [calendar components:NSYearCalendarUnit| NSMonthCalendarUnit| NSWeekCalendarUnit| [NSDayCalendarUnit fromDate:now];
NSDate *today = [calendar dateFromComponents:components];
[components setDay:components.day+1]; //
NSDate *tomorrow = [calendar dateFromComponents:components];

【讨论】:

以上是关于带有 NSdate 谓词的 NSFetchrequest的主要内容,如果未能解决你的问题,请参考以下文章

带有谓词的核心数据获取请求。需要正确的 NSPredicate

作为获取谓词的日期范围 - 核心数据之间的 NSDate 谓词

谓词因从 Core Data 获取属性类型为“NSDate”对象的对象而失败

如何快速为 NSDate 做核心数据获取谓词?我想按月过滤

谓词,从 NSDate 中按年份过滤,产生一个 nil 日期和一个讽刺的 Xcode 错误

从 iOS 客户端谓词问题查询 Azure 同步表?