2017-02-11 5 views
0

私はxcodeとswift 3で4日間プログラミングしていますが、これらのページはすでに非常に役立っています。私が実行した問題は、私のCore Dataエンティティから古い冗長なレコードを削除しようとしたことです。私は日付が打たれているレコードを追加することができますが、その日付が過去になったら、そのレコードを取り除きたいのです。ここまで私がこれまでに持っていたことは、問題が私がstart_timeの値を次に日付に割り当てる方法にあることを示唆するエラーを私に与えることです。私が行方不明になっていることは明らかですか?コアデータから古いレコードを削除する

アプリを終了

***キャッチされない例外により 'NSUnknownKeyException'、理由:

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 
} 

そして、ここでは、私が取得していますエラーです「[valueForUndefinedKey:]:このクラスは、キー値コーディングではありません - キーstart_timeに準拠しています。

答えて

0

あなたはviewContextからではなく、NSManagedObjectから日付を取得しようとしていると、コンテキストは、キー値コーディング準拠のキーのstart_timeのためではありません。

私はそれが

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

だと仮定しかし、あなたは述語start_date < nowを使用してフェッチを実行する場合は、多くの作業を保存することができます。削除されるすべてのレコードが返されます。

+0

あなたは絶対に正しいです。あなたがそれを言い次第すぐに飛び出します。感謝万円。それが私を夢中にしていた! – gaviano

関連する問題