2017-06-15 93 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)") 
    } 
}