List ForEach 未正确更新

时间:2021-04-23 08:26:42

标签: swiftui swiftui-list

我正在使用 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 只每隔一次显示一次?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

相关问题