微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

List ForEach 未正确更新

如何解决List ForEach 未正确更新

我正在使用 Core data 和 Swiftui,一切正常,但在这个视图中,我有一个 List 和 ForEach 不起作用。

所以为了测试目的,我的代码目前看起来像这样:


@Observedobject var viewmodel = NewLearningWhyviewmodel()

vstack {
    ForEach(viewmodel.whys,id: \.self) { why in
        Text(why.why)
    }
            
    List {
        ForEach(viewmodel.whys,id: \.self) { why in
            Text(why.why)
        }
    }
           
    Button(action: {
        viewmodel.createWhy(why: "Test",count: viewmodel.whys.count,learning: learn)
        viewmodel.fetchWhy(predicate: nspredicate(format: "parentLearning == %@",learn))
    }){
        Text("Add")
            .font(.title)
            .foregroundColor(.white)
    }
}            

问题是我的列表 { ForEach,我第一次按下添加按钮时会显示新的原因,第二次按下按钮时整个列表消失了,第三次按下按钮时列表再次显示所有 3 个项目.

为了测试这个问题,我添加了第一个 ForEach 部分并始终显示正确的项目,因此视图模型或添加项目没有问题,项目被添加并从视图模型发布部分已更新。

有谁知道为什么我的 List { ForEach 只每隔一次显示一次?

解决方法

我遇到了这个问题。我通过在 ViewModel 中添加 objectWillChange 来解决这个问题,并在您的 why 更改时手动发送()它。其实我不太清楚你的NewLearningWhyViewModel,所以这只是一个例子,你应该试试。

class NewLearningWhyViewModel: ObservableObject {
    let objectWillChange: ObservableObjectPublisher = ObservableObjectPublisher()
    @Published var whys: Why = Why() {
        didSet {
            objectWillChange.send()
        }
    }
}
,

好的,来自 Becky Hansmeyer 的帖子解决了它,将 .id(UUID()) 添加到列表中解决了它并且它开始正常工作......

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。