Swift Coredata:约束中的错误

Swift Coredata:约束中的错误,swift,core-data,error-handling,constraints,core,Swift,Core Data,Error Handling,Constraints,Core,我有这个简单的代码来保存coredata中的对象。 在我的xcatamodel中,我将约束设置为“firstName”: . 删除“学生”实体中的所有条目后,代码工作正常。 但只有一次。 当我第二次保存同一个集合时,我得到了“致命错误” func saveStudent(){ 让student:student=NSEntityDescription.insertNewObject(forEntityName:“student”)作为!student插入:DatabaseController.g

我有这个简单的代码来保存coredata中的对象。 在我的xcatamodel中,我将约束设置为“firstName”: . 删除“学生”实体中的所有条目后,代码工作正常。 但只有一次。 当我第二次保存同一个集合时,我得到了“致命错误”

func saveStudent(){
让student:student=NSEntityDescription.insertNewObject(forEntityName:“student”)作为!student插入:DatabaseController.getContext()
student.firstName=“亨利”
student.lastName=“米勒”
学生年龄=22
DatabaseController.saveContext()
let fetchRequest:NSFetchRequest=Student.fetchRequest()
做{
让searchResults=尝试DatabaseController.getContext().fetch(fetchRequest)
打印(“结果数:\(searchResults.count)”)
以[Student]的身份获取搜索结果{
打印(“\(result.firstName)\(result.lastName)\(result.age)”)
}
}抓住{
打印(“错误:\(错误)”)
}
}
据我所知,约束是为了识别一个潜在的双重身份。 有人知道如何解决这个问题吗? 以下是错误: 如需任何帮助,请提前感谢。

找到了解决方案:

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)")
    }
}
func saveStudent(){
让student:student=NSEntityDescription.insertNewObject(forEntityName:“student”)作为!student插入:DatabaseController.getContext()
student.firstName=“亨利”
student.lastName=“米勒”
学生年龄=22

DatabaseController.getContext().mergePolicy=NSMergeByPropertyObjectTrumpMergePolicy DatabaseController.saveContext() let fetchRequest:NSFetchRequest=Student.fetchRequest() 做{ 让searchResults=尝试DatabaseController.getContext().fetch(fetchRequest) 打印(“结果数:\(searchResults.count)”) 以[Student]的身份获取搜索结果{ 打印(“\(result.firstName)\(result.lastName)\(result.age)”) } }抓住{ 打印(“错误:\(错误)”) } }
这就是为什么会给出错误:防止创建重复项。您知道如何将此函数更改为更新函数吗?意思是检查副本,如果没有添加新条目,如果是,取消条目。您必须进行提取并检查它是否已经存在。如果它进行了更新,如果它不进行更新,则创建。没有快速插入。它正在工作。如果条目存在,则它什么也不做;如果不存在,则添加条目。谢谢。NSMergeByPropertyObject特朗普合并策略
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)")
    }
}