在我的应用中,我有来自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
视图未更新。如果我手动切换选项卡,则会更新。
为什么会发生这种情况,我该如何纠正代码?