2017-02-11 84 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