我的核心数据库中有一个任务实体列表。
我只想查询其dueDate属性为Today的任务。
现在,由于技术原因,我想将查询保存在我的CoreData表中。 (在另一个实体中)。 意思是我必须以某种方式告诉sqlite,返回当前日期。 我尝试使用NSPredicate这样无济于事:
dueDuate > date('now','start of day')
我有一个例外:
Unable to parse function name 'date' into supported selector (date)
无论如何要实现我的目标?
答案 0 :(得分:-1)
将查询存储在必须查询和检索的Core Data实体中是不必要的,也是不可行的。这就像写一个电话号码来查询这个地址门上的地址。
最简单的方法是简单地将日期保留为属性,然后构造简单谓词以检索此日期的List
个对象。所需要的只是某一天的开始和结束。
[NSPredicate predicateWithFormat:"dueDate > %@ && dueDate < %@", dayStart, dayEnd]
就是这样。您的“没有更多日期操作”的要求是不现实的,因为您需要动态计算一天的开始和结束。将它存储在Core Data的持久存储中是无稽之谈。
所以要获取任何日期的开始日期(在NSDate
上写为category):
-(NSDate *)startOfDay {
NSDateComponents *components = [[NSCalendar currentCalendar] components:
NSCalendarUnitYear| NSCalendarUnitMonth | NSCalendarUnitDay
fromDate: self];
components.hour = 0; components.minute = 0; components.second = 0;
return [[NSCalendar currentCalendar] dateFromComponents:components];
}
任何一天的结束
-(NSDate *)endOfDay {
NSDateComponents *components = [[NSDateComponents alloc] init];
components.day = 1;
return [[NSCalendar currentCalendar] dateByAddingComponents:components
toDate:self.startOfDay options:0];
}
对于上面的谓词,您只需将dayStart
和dayEnd
分别替换为[[NSDate date] startOfDay]
和[[NSDate date] endOfDay]
。