【问题标题】:Coredata: error in constraintsCoredata:约束错误
【发布时间】:2017-06-15 09:54:34
【问题描述】:

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

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)")
    }
}

据我了解,该约束旨在识别潜在的重复项。 有人知道如何解决这个问题吗? 这是错误:Picture 如需任何帮助,请提前致谢。

【问题讨论】:

  • 这就是它给出错误的原因:防止创建重复项。
  • 你知道如何把这个函数改成更新函数吗?检查重复的意思,如果不添加新条目,如果是,则取消条目。
  • 你必须做一次提取并检查它是否已经存在。如果它进行更新,如果没有,则创建。没有快速更新。
  • 它现在可以工作了。如果条目存在,它什么也不做,如果它不存在,它会添加条目。谢谢。
  • NSMergeByPropertyObjectTrumpMergePolicy

标签: swift core-data error-handling constraints core


【解决方案1】:

找到解决方案:

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)")
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-11
    • 2018-01-20
    • 1970-01-01
    • 2019-12-30
    • 1970-01-01
    • 2022-09-23
    • 2015-02-22
    • 2017-01-26
    相关资源
    最近更新 更多