从核心数据中删除旧记录

时间:2017-02-11 03:25:54

标签: core-data swift3

我已经使用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;

1 个答案:

答案 0 :(得分:0)

您正尝试从viewContext而不是NSManagedObject获取日期,并且上下文与密钥start_time无关键值编码

我想它是

let thenDate = object.value(forKey: "start_time") as! Date

但如果使用谓词start_date < now执行提取,则可以节省大量工作。这将返回所有要删除的记录。