【发布时间】:2020-03-12 10:38:13
【问题描述】:
我在 Core Data 中有一个 .xcdatamodel,其中包含实体内容和属性 dateCreated 类型日期和 text1 类型字符串。
//CREATE
func createData() {
guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else { return }
let managedContext = appDelegate.persistentContainer.viewContext
let contentEntity = NSEntityDescription.entity(forEntityName: "Content", in: managedContext)!
let content = NSManagedObject(entity: contentEntity, insertInto: managedContext)
content.setValue(Date(), forKey: "dateCreated")
content.setValue("someText", forKey: "text1")
do {
try managedContext.save()
} catch let error as NSError {
print("Could not save. \(error), \(error.userInfo)")
}
}
//READ
func readData() {
guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else { return }
let managedContext = appDelegate.persistentContainer.viewContext
let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "Content")
fetchRequest.predicate = NSPredicate(format: "text1 = %@", "some text")
do {
let result = try managedContext.fetch(fetchRequest)
for data in result as! [NSManagedObject] {
print(data.value(forKey: "dateCreated") as! Date)
print(data.value(forKey: "text1") as! String)
}
} catch {
print("Failed")
}
}
如果我打印 dateCreated,它会给出:2020-03-12 10:20:42 +0000 我的问题是:如何按日期阅读和过滤?只有日期,没有时间。例如 2020-03-12 或任何其他没有时间的日期:
fetchRequest.predicate = NSPredicate(format: "dateCreated = %@", ?????)
【问题讨论】:
-
谢谢两位,这些参考资料很有用。但我的问题有所不同,但有了这些信息,我仍然无法解决问题
-
如果它是
Date类型,那么dateCreated不会以“2020-03-12 10:20:42 +0000”格式存储,即使这是您在打印它。正如@MartinR 和@mag_xbc 提供的链接所示,要过滤给定日期的项目,无论时间如何,您都需要选择 dateCreated 位于相关当天午夜之后和之后第二天午夜之前的项目。这就是这些答案所达到的效果。