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