【问题标题】:Resolving optional one-to-one relationship for use with SwiftUI ForEach?解决与 SwiftUI ForEach 一起使用的可选一对一关系?
【发布时间】:2024-01-22 09:58:01
【问题描述】:

我有两个 CoreData 实体 A 和 B,它们之间是一对一的关系。 B 实体记录必须始终存在。 A 也必须与 B 有关系。

但是,CoreData 强制执行可选关系。

ForEach(items, id: \.self) { item in
  MyView(aItem: item, bItem: item.B)
}

因此,上面的item.B 是可选的。 我需要 bItem 值作为 ObservedObject,但它们不能是可选的

struct MyView: View {
    @ObservedObject var aItem: A
    @ObservedObject var bItem: B

我尝试在 MyView 周围包裹 if let,但这会导致 NavigationLink 弹出问题。

无论我转向哪种方式,我都会遇到可选问题。

【问题讨论】:

  • 一种方法是将模型中的代码生成(codegen)设置为手动并编辑文件,这样您就有了非可选的关系

标签: ios swift swiftui


【解决方案1】:

你会在这里处理它

MyView(aItem: item, bItem: item.B ?? BManager.create(itemA: item))

BManager 是一个 Manager 对象,它拥有创建空白对象的便捷方法。

这样,如果B 恰好是nil,则会立即创建一个对象。

Here 是类似的东西,它涉及structCoreData 关系,所以它不精确但与此类似。

【讨论】:

    最近更新 更多