ViewModel变量未加载,尽管在onAppear函数调用中进行了更新



我目前正在开发一款健身追踪应用程序。

该应用程序允许用户添加特定一天的体重和热量,然后提供一个查看页面,用户可以在其中查看他们的条目,屏幕底部显示平均体重和热量。

如果我添加了一个新条目,然后单击列表视图页面,那么新条目就会出现在页面上,但平均值不会更新。只有当我返回到主视图,然后再次返回到列表视图屏幕时,它才会更新。

struct WeightEntriesListView: View {

@ObservedObject var weightEntriesViewModel = WeightEntriesViewModel()
var formatter = DateFormatter()

var body: some View {
HStack(spacing: 50) {
Text("Calories").font(.title2).padding(.leading, 10)
Text("Weight").font(.title2)
Text("Date").font(.title2)
Spacer()
}

List (weightEntriesViewModel.weightEntries) { item in

let weight: String = String(format: "%.2f", item.weight)
let date: String = self.convertDate(item: item)
HStack(spacing: 50) {
Text("(item.calories)")
Text(weight)
Text(date)
Button(action: {
self.weightEntriesViewModel.removeEntry(weightEntry: item)
self.weightEntriesViewModel.getData()
}, label: {
HStack {
Image(systemName: "delete.left")
.font(/*@START_MENU_TOKEN@*/.title/*@END_MENU_TOKEN@*/).frame(width: 10, height: 10, alignment: /*@START_MENU_TOKEN@*/.center/*@END_MENU_TOKEN@*/)
}.padding()
.foregroundColor(.white)
.background(Color.red)
.cornerRadius(40)
})
}
}

HStack(spacing: 80, content: {
Text("Average Calories")
Text("Average Weight")
})
HStack(spacing: 80){
Text(String(self.weightEntriesViewModel.averageCalories))
Text(String(self.weightEntriesViewModel.averageWeight))
}
.onAppear(perform: {
self.weightEntriesViewModel.getData()
self.weightEntriesViewModel.calculateAverages()
})
NavigationLink(
destination: TrendsView(weightEntries: self.weightEntriesViewModel.weightEntries),
label: {
Text("View Trends")
})
}

weightEntriesViewModel。具有在CCD_ 2函数中更新的平均变量。我有点不确定问题是什么,因为获取数据功能似乎工作得很好,因为新数据出现在列表视图中,但在我离开页面并再次返回之前,平均值不会更新。

试试这个:

Button(action: {
self.weightEntriesViewModel.removeEntry(weightEntry: item)
self.weightEntriesViewModel.getData()
self.weightEntriesViewModel.calculateAverages() // <--- here
}, .....

最新更新