我正在尝试为核心数据中的日期属性创建一个 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 返回一个字典数组而不是 [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 { $0["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 { $0["savedTime"] as! Date }
} catch {
print(error)
return [Date]()
}
}
关于ios - Swift 从 ManagedObjectContext FetchRequest 获取日期数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37144207/