本文介绍了CoreData:为什么在book.isPublic切换时不刷新UI的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
"@ Environment(.managedObjectContext)var context"将监视上下文的更改.当我单击按钮以切换isPublic时,我认为它将导致UI刷新,按钮文本将更改,但是为什么呢?
'@Environment(.managedObjectContext) var context' will monitor the changes of context. When I click the button to toggle isPublic, I think it will cause to UI refreshing, Button text will change, But not, WHY?
struct BookInfoView: View {
@Environment(\.managedObjectContext) var context
var isPublic: Bool { return book.isPublic }
let book: Book
var body: some View {
print("refresh"); return
Group {
Button(action: onPublicToggled) {
Text(isPublic ? "private" : "public")
}
}
}
func onPublicToggled() {
context.perform {
book.isPublic.toggle()
try? context.save()
}
}
}
推荐答案
您需要通过 ObservedObject
包装器(如
struct BookInfoView: View {
@Environment(\.managedObjectContext) var context
@ObservedObject var book: Book
var body: some View {
print("refresh"); return
Group {
Button(action: onPublicToggled) {
Text(book.isPublic ? "private" : "public")
}
}
}
func onPublicToggled() {
context.perform {
book.isPublic.toggle()
try? context.save()
}
}
}
注意: @Environment(\.managedObjectContext)var context
与 context
本身有关,而不与CoreData对象有关.
Note: @Environment(\.managedObjectContext) var context
relates to context
itself, not to your CoreData objects.
这篇关于CoreData:为什么在book.isPublic切换时不刷新UI的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!