首页 > 解决方案 > 自动更新不起作用:为什么 CoreData FetchedResults 没有传递给包含的视图

问题描述

在我的应用程序中,我有来自 CoreData 的数据。此数据由蓝牙更新。数据检索与

@Environment(\.managedObjectContext) var managedObjectContext
@FetchRequest(fetchRequest: fetchRequest(), animation: nil) var beacons: FetchedResults<Beacon>

并且当更新 CoreData 数据时,beacons也会更新,并且使用当前值更新视图。

但是当我使用来自不同文件的包含视图时,它们不会更新。

我的代码读取

struct ContentView: View {
    @Environment(\.managedObjectContext) var managedObjectContext
    @FetchRequest(fetchRequest: fetchRequest(), animation: nil) var beacons: FetchedResults<Beacon>

    static func fetchRequest() -> NSFetchRequest<Beacon> {
        let request: NSFetchRequest<Beacon> = Beacon.fetchRequest()
        request.sortDescriptors = [NSSortDescriptor(key: "id", ascending: true)]

        return request
    }

func debugPrint() -> AnyView {
    let temperature = beacons[0].adv!.temperature
    return AnyView ( Text("temp = \(temperature)") )
}

var body: some View {
    TabView {
        NavigationView {
            List {
                Section(header: Text("Section 1")) {
                    debugPrint()
                    ForEach(beacons.filter { $0.isActive }) { beacon in
                        NavigationLink(destination: BeaconDetail(beacon: beacon)) {
                            BeaconListEntry(beacon: beacon)
                        }
                    }
                }
            }
        }
    }
}

在不同的文件中

struct BeaconListEntry : View {
    @Environment(\.managedObjectContext) var managedObjectContext
    var beacon: Beacon

    var body: some View {
        Text(verbatim: String(format:"%.1f °C", beacon.adv!.temperature))
    }
}

debugPrint()当CoreDate 中有新数据可用时,该行会更新,但BeaconListEntry视图不会更新。如果我手动切换选项卡,则会更新。

为什么会发生这种情况,我该如何更正代码?

标签: swiftuiios13xcode11

解决方案


推荐阅读