【发布时间】:2020-09-05 07:47:00
【问题描述】:
每当用户通过绑定变量保存数据后返回到表单子视图时,表单会显示编辑之前的旧数据,我不明白为什么。
我有一组 Face 对象(技术上是核心数据实体),在父 NavigationView 中声明为 State 变量。然后我遍历它们以创建这样的 NavigationLink:
@State var formDieFaces: [Face] = [] // this gets initialized akin to the below (truncated)
...
let face1 = Face(entity: Face.entity(), insertInto: nil)
self._formDieFaces = State(initialValue: [face1])
...
ForEach (formDieFaces.indices) { curIndex in
NavigationLink(
destination: FaceForm(self.$formDieFaces[curIndex]))
) {
FaceRowView(faceToList: self.formDieFaces[curIndex])
}
}
在 FaceForm 中,我收到变量并“保存”它:
@Binding var faceToEdit: Face
@State var formFaceText: String = String()
...
// in the form
TextField("Placeholder text", text: $formFaceText)
...
// on save, do the below
self.faceToEdit.text = self.formFaceText
奇怪的是,在 FaceForm 中“保存”时,主 NavigationView 确实 更新,并且在该 NavigationLink (FaceRowView) 中,所有内容都显示正确的数据。但是,如果我之后点击返回 FaceForm,它会显示保存之前的旧数据。
我有一种感觉,我正在对 State 和 Binding 变量做一些非常迟钝的事情,但我终其一生都无法弄清楚发生了什么。我尝试了@ObservedObject、@ObservableObject、@StateObject 等的各种组合。
谁能指点我正确的方向?
编辑:明确地说,FaceRowView 工作并显示正确的数据。 FaceForm 是出现问题的地方,就像它记住了数据的旧副本一样。
如果对您有帮助,这里是该行为视频的链接:https://youtu.be/8eC-TdtFP5s
【问题讨论】: