核心数据在后台更新后如何自动刷新swiftUI视图?

Bra*_*ang 6 background core-data swift swiftui

在后台更新核心数据后,如何在不调用 onAppear 方法的情况下自动刷新 swiftUI 视图?

struct Page1: View {

@FetchRequest(entity: Word.entity(), sortDescriptors: [])
var wordsFromCoreData: FetchedResults<Word>

@State var isPresenting = false


var body: some View {

    NavigationView{
        VStack{
            NavigationLink(destination: Page2()){
                Text("Add")

            }
            List(wordsFromCoreData, id: \.self){item in

                WordRowView(word:item)

            }.navigationBarTitle(Text("English Words"))
        }
    }
}
}
Run Code Online (Sandbox Code Playgroud)

是的,我想@FetchRequest会在我的 Page1出现后帮助我自动重新加载数据

但是,如果我使用NavigationLink.sheet访问 Page2,我认为 swift 不会调用 onAppear。

所以,如果我去 Page2,做一些 Core Data 的事情,比如从 Internet 获取图像,然后我回到 Page1,它从不显示数据,但数据实际上已经存在于我的核心数据中。因此,这意味着 Page1 在这种情况下不会刷新数据。

另一种情况工作正常,例如,我将 Page2 设置为另一个TabView而不是NavigationLink(A Detail View),当我返回到 Page1 时,视图已刷新。

但我更喜欢NavigationLink完成我的工作。那么,有没有办法在后台更新核心数据后自动刷新 swiftUI 视图?

小智 1

CoreData 内置了通知。

查看这篇文章了解详细信息

在您的视图中,您可以使用.onReceive修饰符来接收此通知并更新视图。