更新 CoreData 中的数据及其在视图中的值
Posted
技术标签:
【中文标题】更新 CoreData 中的数据及其在视图中的值【英文标题】:Update data in CoreData and its value in a view 【发布时间】:2020-05-30 20:53:40 【问题描述】:我是使用 Swift 和 CoreData 开发的新手。我一直在努力使用以下代码,该代码显示一个视图,其中包含与 CoreData 一起存储的学生的一些信息。视图中显示的“提问”按钮会更新 student.questionAskedClass,但视图不会更新其值。
该值在内部明显更新,因为如果我重新启动应用程序,我可以看到该值已更新。但我希望看到它实时更新。
感谢您的帮助, 弗朗索瓦
import SwiftUI
struct StudentView: View
@Environment(\.managedObjectContext) var managedObjectContext
var student: Student
var body: some View
VStack(alignment: .leading)
Text("\(student.firstName)").font(.headline).foregroundColor(Color.black)
Text("\(student.lastName)").font(.headline).foregroundColor(Color.gray)
Spacer().frame(height: 10)
Text("\(student.email)").font(.headline).foregroundColor(Color.gray)
Spacer().frame(height: 10)
Text("Number of questions asked: \(student.questionAskedClass)").font(.headline).foregroundColor(Color.gray)
Button(action:
self.askQuestion()
)
Text("Ask question")
func askQuestion()
self.managedObjectContext.performAndWait
self.student.questionAskedClass += 1
try? self.managedObjectContext.save()
【问题讨论】:
你的学生变量需要@ObservedObject 才能动态更新。 【参考方案1】:你只需要
struct StudentView: View
@Environment(\.managedObjectContext) var managedObjectContext
@ObservedObject var student: Student // << here !!
使用 Xcode 11.4 / ios 13.4 测试
【讨论】:
【参考方案2】:您正在更改您的 CoreData 对象之一的属性。但是,这不会刷新视图,因为您仅在人员实例上使用来显示数据。您将需要刷新视图以显示更新。
只需使用虚拟@State
,您将在更改后切换。
@State var updateView : Bool = false
您需要在视图中使用它,所以只需将其添加到某处:
Text("\(student.firstName)" + (self.updateView ? "" : "").font(.headline).foregroundColor(Color.black)
然后切换它:
Button(action:
self.askQuestion()
self.updateView.toggle()
)
Text("Ask question")
【讨论】:
以上是关于更新 CoreData 中的数据及其在视图中的值的主要内容,如果未能解决你的问题,请参考以下文章
SwiftUI - 在Coredata中添加链接对象后视图不更新
核心数据:如何显示 fetchrequest 的结果以计算表格视图单元格中的值