Swiftui 列表未正确更新
我使用的是核心数据和Swiftui,一切都很好,但在这个视图中,我有一个列表,ForEach不起作用 因此,出于测试目的,我的代码目前如下所示:Swiftui 列表未正确更新,swiftui,swiftui-list,Swiftui,Swiftui List,我使用的是核心数据和Swiftui,一切都很好,但在这个视图中,我有一个列表,ForEach不起作用 因此,出于测试目的,我的代码目前如下所示: @ObservedObject var viewModel = NewLearningWhyViewModel() VStack { ForEach(viewModel.whys, id: \.self) { why in Text(why.why) } List {
@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,我第一次按add按钮时,它显示了新的原因,第二次按按钮时,整个列表消失,第三次按按钮时,列表再次显示所有3项
为了测试这个问题,我添加了第一个ForEach部分,它始终显示正确的项,因此viewmodel或添加项没有问题,添加项并从viewmodel发布,因为该部分已更新
有人知道为什么我的列表{ForEach只每隔一次显示一次吗?我遇到了这个问题。我通过在ViewModel中添加
objectWillChange
和send()来解决这个问题当你的为什么
被更改时,它会手动执行。实际上我不清楚你的新学习为什么视图模型
,所以这只是一个示例,你应该尝试一下
class NewLearningWhyViewModel: ObservableObject {
let objectWillChange: ObservableObjectPublisher = ObservableObjectPublisher()
@Published var whys: Why = Why() {
didSet {
objectWillChange.send()
}
}
}
好的,Becky Hansmeyer的帖子解决了这个问题,添加了.id(UUID())根据我的经验,将列表放在VStack中有时会导致奇怪的行为。您可以尝试以下几点:1)将VStack的框架设置为maxWidth和maxHeight为.infinity,并放置“scaleToFill()”在列表中添加.id(UUID())修饰符。2)将.id修饰符添加到列表中,如果没有帮助,则添加到ForEach中。如果不需要删除和重新排序等列表行为,也可以尝试为按钮添加带有固定视图的LazyVStack。