自动更新不起作用:为什么CoreData FetchedResults没有传递给包含的视图

时间:2019-08-28 14:18:33

标签: swiftui ios13 xcode11

在我的应用中,我有来自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))
    }
}

由于CoreDate中提供了新数据,因此debugPrint()行已更新,但是BeaconListEntry视图未更新。如果我手动切换选项卡,则会更新。

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

0 个答案:

没有答案