swiftui - 自动更新不起作用:为什么 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
视图不会更新。如果我手动切换选项卡,则会更新。
为什么会发生这种情况,我该如何更正代码?
解决方案
推荐阅读
- flutter - Flutter 中 Column 的子节点之间的空间小于 MainAxisSize.min
- r - 对多个列表取平均值的更有效方法
- python - 如何从函数返回 numpy.array 对象?
- 3d - ar.js 3d 模型不显示
- jenkins - Ansible 无法在 curl 调用中发送 json 变量
- python - 如何对具有相同 ID 的行应用条件?
- android - EditText 不随多语言变化
- airflow - 气流 - AWS_GLUE_OPERATOR 发生了什么?
- javascript - 如何提高 JS 中函数式代码的性能
- sql - SQL查询返回所有相同的数字,忽略数字是否为正