在 SwiftUI 中更新 CoreData 关系对象

Update CoreData relationship object in SwiftUI

关于 SwiftUI/CoreData 主题,我需要你的帮助。

我有一个 Kid class 包含一个名为 parents 的一对多关系,它是 NSSet?Parent 个对象。

我想访问并能够更新我的 parents 关系对象的属性。 我创建了一个计算 属性 parentsArray 来从 NSSet 中获取一个数组。这是代码:

public var parentsArray: [Parent] {
    let set = parents as? Set<Parent> ?? []
    return set.sorted {
        [=10=].position < .position
    }
}

现在,让我们转到我的 SwiftUI 视图:

ForEach(viewModel.kid.parentsArray) { parent in
    Section(header: Text("Parent \(parent.position)")) {
        TextField("Name", text: $parent.firstName) // Error: Cannot find $parent in scope                   
    }
}

如您所见,问题是我无法访问绑定 $parent.firstName

ForEach循环局部变量parent的类型为Parent

你能帮帮我吗?非常感谢!

TextField 期望 Binding,但您的可计算 parentsArray 提供了 CoreData 对象。

最好将TextField分离成单独的视图与observed Parent, like

struct ParentView: View {
  @ObservedObject var parent: Parent    // allows binding 

  var body: some View {
     TextField("Name", text: $parent.firstName)
  }
}

然后在节中使用它,比如

ForEach(viewModel.kid.parentsArray) { parent in
    Section(header: Text("Parent \(parent.position)")) {
        ParentView(parent: parent) 
    }
}