核心数据 - 带有日期的谓词

Z S*_*Z S 10 core-data objective-c nspredicate

我很难为"最近完成"任务编写一个谓词,即如果它在过去7天内完成,则显示该任务.我想我需要做这样的事情:"如果现在<dateCompleted + 7天".

dateCompleted是表上的一个属性,但我不确定我应该如何获得它的值并在谓词中添加7天.我想在编写NSPredicate之前我需要先获取属性值,但是怎么样?此时我无法访问managedObject.

这可能是解决方案的结果,但我无法弄清楚如何定义'oneWeek',我认为你不能在定义谓词时添加值:

NSPredicate *pred = [NSPredicate predicateWithFormat:@"%@ < todoCompletedDate + %@", [NSDate date], oneWeek];
Run Code Online (Sandbox Code Playgroud)

mmc*_*omb 18

你快到了.

首先,您需要定义日期范围.要做到这一点,你需要从今天的日期开始,然后添加几周的时间来找到有效范围的结束.获得该范围后,您可以构建谓词以查找截止日期> = start和<= end的所有任务.这是我编写的一些非常相似的代码的摘录......

NSDate *today = [NSDate date];
NSDate *startOfToday = [DateHelper startOfDay:today];
NSDate *endOfWeek = [DateHelper addDaysToDate:today daysToAdd:6];
return [NSPredicate predicateWithFormat:@"(dueDate >= %@) AND (dueDate <= %@) AND complete == 0", startOfToday, endOfWeek];
Run Code Online (Sandbox Code Playgroud)

  • 相当不错的答案,但你应该注意使用第三方库而不提他们:)我很漂亮我有时间搞清楚地狱里的DateHelper在哪里:) (6认同)