2017-06-15 63 views
0

我有這個簡單的代碼來保存coredata中的對象。 在我的xcatamodel中,我設置了一個約束爲「firstName」: Picture。 刪除「學生」實體中的所有條目後,代碼工作正常。 但只有一次。 當我第二次保存相同的設置時,我會收到「致命錯誤」。Coredata:約束中的錯誤

func saveStudent() { 

    let student: Student = NSEntityDescription.insertNewObject(forEntityName: "Student", into: DatabaseController.getContext()) as! Student 

       student.firstName = "henry" 
       student.lastName = "miller" 
       student.age = 22 

    DatabaseController.saveContext() 
    let fetchRequest: NSFetchRequest<Student> = Student.fetchRequest() 

    do { 
     let searchResults = try DatabaseController.getContext().fetch(fetchRequest) 
     print("number of results: \(searchResults.count)") 
     for result in searchResults as [Student] { 
      print("\(result.firstName) \(result.lastName) \(result.age)") 
     } 
    } catch { 

     print ("error: \(error)") 
    } 
} 

據我所知,約束條件是爲了識別潛在的dublicate。 任何一個想法如何解決這個問題? 這裏的錯誤:Picture 對於任何幫助,提前致謝。

+0

這就是爲什麼它是給錯誤:防止重複的創建。 –

+0

你知道如何將此功能更改爲更新功能嗎?如果沒有添加新條目,如果是,則取消條目。 –

+0

你必須做一個檢索並檢查它是否已經存在。如果它更新,如果它沒有,然後創建。沒有快速上升。 –

回答

0

找到了解決辦法:

func saveStudent() { 

    let student: Student = NSEntityDescription.insertNewObject(forEntityName: "Student", into: DatabaseController.getContext()) as! Student 

       student.firstName = "henry" 
       student.lastName = "miller" 
       student.age = 22 

    DatabaseController.getContext().mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy 

    DatabaseController.saveContext() 
    let fetchRequest: NSFetchRequest<Student> = Student.fetchRequest() 

    do { 
     let searchResults = try DatabaseController.getContext().fetch(fetchRequest) 
     print("number of results: \(searchResults.count)") 
     for result in searchResults as [Student] { 
      print("\(result.firstName) \(result.lastName) \(result.age)") 
     } 
    } catch { 

     print ("error: \(error)") 
    } 
}