带有 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 没有时间戳?
【问题讨论】:
没有“格式”的NSDate
。 eve_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”对象的对象而失败