2017-02-11 70 views
0

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

这里就是我得到的错误:

***终止应用程序由于未捕获的异常 'NSUnknownKeyException',原因:“[valueForUndefinedKey:]:此类不是密钥值编码符合关键的start_time。'

回答

0

您正在尝试从viewContext而不是从NSManagedObject获取日期和上下文不是键值编码兼容的关键START_TIME

我想这是

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

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

+0

你是对的。你一提到它就立刻跳出来。太感谢了。这让我疯狂! – gaviano