如何在Swift中使用Core Data获取n天的项目?

时间:2015-02-20 00:33:38

标签: iphone swift core-data nsdate nsfetchrequest

我正在尝试使用CoreData查找超过2天的记录,以便进行一些处理。如何使用Swift查找超过两天的记录?

这是我的尝试:

class func findOldPics() {
    var appDel: AppDelegate = (UIApplication.sharedApplication().delegate as AppDelegate)
    var context: NSManagedObjectContext = appDel.managedObjectContext!
    var managedObject: NSManagedObject!
    var fetchRequest = NSFetchRequest(entityName: "Video")
    var date = NSDate(timeIntervalSinceNow: 3600)

    fetchRequest.predicate = NSPredicate(format: "date <= %@", date)

    if let fetchResults = appDel.managedObjectContext!.executeFetchRequest(fetchRequest, error: nil) as? [NSManagedObject] {
        if fetchResults.count != 0{
            NSLog("***************** found film! updating status %@", fetchResults)
        } else {
            println("***************** no films found")
        } // else
    }
} 

1 个答案:

答案 0 :(得分:1)

假设dateVideo实体的一个属性,并且它包含此查询的有效值,

  • 您需要使用timeIntervalSinceNow:的负数来获取过去的日期。你将来会用一个日期。
  • 一天超过3600秒,你可能意味着86400,或2天的两倍。但这仍然不是一个好方法。

2天前获得约会的更好方法是使用NSCalendar而不是假设一些秒数。如果夏令时在过去2天内开始或结束怎么办?您可以通过以下方式在2天前可靠地获取日期:

let twoDaysAgo = NSCalendar.currentCalendar().dateByAddingUnit(.DayCalendarUnit, 
    value: -2, toDate: NSDate(), options: nil)