【问题标题】:Core Data saving Object's relationship to existing Object核心数据保存对象与现有对象的关系
【发布时间】:2022-01-25 08:19:10
【问题描述】:

如果一个已存在的类别已存在,我如何保存待办事项并设置其与现有类别的关系?我知道如何创建一个新类别并将其与新 Todo 的关系设置为如下所示。我在表单中执行此操作。

Category 设置为具有many Todos

        let category2 = Category(context: viewContext)
        category2.id = UUID()
        category2.title = "Fun"

        let todo = Todo(context: viewContext)
        todo.title = "Hi"
        todo.dueDate = Date.now
        todo.relationship = category2

        try? viewContext.save()

//todo.relationship = create a new Category if one doesn't exist, if it does exist, select that as the relationship. If no category, then do nothing

我一直在关注这个解决方案https://www.youtube.com/watch?v=y1oWprQqLJY&t=483s,它也有同样的问题,每次按下按钮时都会创建一个新的“Origin”。

【问题讨论】:

标签: ios swift core-data swiftui


【解决方案1】:

我的代码很好,我只是错过了这里解释的合并策略。如果您正在关注 Paul 的 HackingWithSwift 视频,请确保您这样做...

这将处理重复项以及为核心数据实体设置的约束。

https://www.hackingwithswift.com/books/ios-swiftui/ensuring-core-data-objects-are-unique-using-constraints

    self.container.viewContext.mergePolicy = NSMergePolicy.mergeByPropertyObjectTrump

【讨论】:

  • 如果您的最终目标是使用 CloudKit 以使 iCloud 成为您的 Core Data 模型的真实来源(例如跨设备共享数据),那么请注意,Core Data 的唯一约束将不起作用。您需要编写自己的重复数据删除方法。
  • 感谢您的提醒,但我不知道如何解决这个问题。 @CALL-151
  • 这将取决于对您的特定数据模型有意义的方式,但这里有一个概念性方法: 1. 确定构成重复的内容(例如,如果标题和截止日期相同,则它是重复的)。 2. 在保存之前,使用构造的谓词执行获取请求以查找重复项。 3.如果存在重复,请勿保存。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多