我已经使用xcode和swift 3编程了四天,并且已经发现这些页面非常有用。我遇到的问题是我尝试从Core Data实体中删除旧的冗余记录。我可以添加带有日期戳的记录,但是一旦该日期过去,我想要删除记录。这是我到目前为止所做的,这给了我一个错误,表明问题在于我如何将start_time中的值分配给thenDate。我错过了一些明显的东西吗?
func DeleteOldRecords() -> Void {
let deleteContext = getContext()
let nowDate = Date()
let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "table")
let result = try? deleteContext.fetch(fetchRequest)
let resultData = result as! [table]
for object in resultData {
let thenDate = deleteContext.value(forKey: "start_time") as! Date
if thenDate < nowDate {
deleteContext.delete(object)
}
}
do {
try deleteContext.save()
}
catch {
}
}
func getContext() -> NSManagedObjectContext {
let appDelegate = UIApplication.shared.delegate as! AppDelegate
return appDelegate.persistentContainer.viewContext
}
这就是我得到的错误:
***由于未捕获的异常终止应用程序&#39; NSUnknownKeyException&#39;,原因:&#39; [valueForUndefinedKey:]:此类不是密钥start_time的密钥值编码兼容。&#39;
答案 0 :(得分:0)
您正尝试从viewContext
而不是NSManagedObject
获取日期,并且上下文与密钥start_time无关键值编码。
我想它是
let thenDate = object.value(forKey: "start_time") as! Date
但如果使用谓词start_date < now
执行提取,则可以节省大量工作。这将返回所有要删除的记录。