Swift 从 ManagedObjectContext FetchRequest 获取日期数组

Swift Get an Array of dates from ManagedObjectContext FetchRequest

我正在尝试为核心数据中的日期属性创建一个 NSDates 数组(一个保存日期数组)。所以我可以在日历上显示有保存项目的天数。我尝试使用下面的代码但出现错误:

由于未捕获的异常 'NSInvalidArgumentException' 而终止应用程序,原因:'无法解析格式字符串 "savedTime"

func datesWithSavedData() -> [NSDate] {
  let fetchRequest = NSFetchRequest(entityName: "UserData")
  fetchRequest.predicate = NSPredicate(format: "savedTime'")
  fetchRequest.sortDescriptors = [NSSortDescriptor(key: "savedTime", ascending: false)]
  do {
    let results =
      try managedObjectContext.executeFetchRequest(fetchRequest) as? [NSDate]
    selectedDates = results!
    print(selectedDates)
  } catch let error as NSError {
    print("Could not fetch \(error), \(error.userInfo)")
  }

  return selectedDates as! [NSDate]
}

一个解决方案是告诉 Core Data return 一个字典数组而不是 [NSManagedObject] 例如

func datesWithSavedData() -> [NSDate] {
    let fetchRequest = NSFetchRequest(entityName: "UserData")
    fetchRequest.sortDescriptors = [NSSortDescriptor(key: "savedTime", ascending: false)]
    fetchRequest.resultType = .DictionaryResultType
    fetchRequest.propertiesToFetch = ["savedTime"]
    do {
       let results = try managedObjectContext.executeFetchRequest(fetchRequest) as! [[String:NSDate]]
       return results.map { [=10=]["savedTime"] as! NSDate }

    } catch let error as NSError {
       print(error)
       return [NSDate]()
    }
}

Swift 3+

func datesWithSavedData() -> [Date] {
    let fetchRequest : NSFetchRequest<NSFetchRequestResult> = NSFetchRequest(entityName: "UserData")
    fetchRequest.sortDescriptors = [NSSortDescriptor(key: "savedTime", ascending: false)]
    fetchRequest.resultType = .dictionaryResultType
    fetchRequest.propertiesToFetch = ["savedTime"]
    do {
       let results = try managedObjectContext.fetch(fetchRequest) as! [[String:Date]]
       return results.map { [=11=]["savedTime"] as! Date }

    } catch {
       print(error)
       return [Date]()
    }
}