【问题标题】:Why are subviews displaying old data when binding objects from an array?为什么从数组绑定对象时子视图会显示旧数据?
【发布时间】: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

【问题讨论】:

    标签: ios swiftui


    【解决方案1】:

    对于那些好奇的人,我不能 100% 确定这是一个纯粹、适当的 SwiftUI 解决方案,但我在此页面上发现了一个我已经实施并且似乎已经“解决”问题的黑客/解决方法:@987654321 @。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-24
      • 1970-01-01
      • 2017-04-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多