我正在寻求有关特定核心数据谓词的帮助(如果可以通过单次提取来处理此问题)。
我有几个具有.date属性的对象(NSDate)。平均而言,特定日期约有4-20个对象。如果愿意,可以考虑日记帐分录。
[Journal]
-date: NSDate
e.g:
J1:[“date”:“2015-08-10 9:00”],
J2:[“date”:“2015-08-10 14:00”],
J3:[“date”:“2015-08-10 18:00”],
J4:[“date”:“2015-08-09 9:00”],
J5:[“date”:“2015-08-09 13:00”],
...
我想根据最后一个条目的日期执行几次提取(不知道实际上是什么时候):
1:获取最后一天发生的所有日记帐分录。
2:获取上周发生的所有日记帐分录
3:获取上个月发生的所有日记帐分录
我正在使用异步获取请求来获取对象:
context.performBlock() {
let fetchRequest = NSFetchRequest(entityName: "Journal")
fetchRequest.predicate = self.page?.predicate
let asyncFetchRequest = NSAsynchronousFetchRequest(fetchRequest: fetchRequest) { (result) in
if result.finalResult?.count > 0 {
println("we are done with our async fetch")
}
completion?(result.finalResult as? [Journal])
}
var fetchError: NSError?
let fetchResult = context.executeRequest(asyncFetchRequest, error: &fetchError) as! NSAsynchronousFetchResult
}
在视图控制器的didLoad方法上调用此方法。视图控制器由UIPageViewController管理。
我找不到允许我获取最大日期加上所有相关日记条目的谓词。我目前的解决方法是获取最新的,在日期设置排序描述符并将结果限制为1(接收最大日期)。然后我运行第二个fetchRequest(从一天的开始到一天结束)。然而,这只是半最优的,我想知道是否有人知道更好的方式。
感谢您的帮助:
最好的, 罗恩
答案 0 :(得分:0)
您可以搜索属于两个日期的所有实体:
"date > %@ and date < %@"
然后使用NSCalendar计算开始日期(即今天减去1天,7天等)。
日期存储为数字,因此搜索非常快,因为它是一个简单的数字比较。
BTW,没有理由使用异步提取来检索少量数据。如果您实际上只返回20个或更少的实体,请索引date属性,将日期放在谓词中,并且返回将很快。只有当你有一个痛苦的谓词搜索字符串等时才应该使用异步提取。