我有一个问题,即主窗格列表视图行在 iPad 中没有正确更新。出于描述目的,我已将代码缩减为
struct CarsList : View {
@State var isPresented = false
@FetchRequest(fetchRequest: Car.allCarsFetchRequest())
var cars: FetchedResults<Car>
var body: some View {
NavigationView {
List {
Button("Add Car") {
self.isPresented.toggle()
}
ForEach (self.cars) { car in
VStack {
Text ("List Car name: \(car.name!)")
NavigationLink(destination: CarDetailView(carVM: CarViewModel(car: car)) ) {
CarRowView(car: car)
}
}
}
}
}
.sheet(isPresented: $isPresented, onDismiss: { }, content: {
CarDetailView(carVM: CarViewModel())
})
}
}
iPad 左侧窗格显示汽车名称列表(CoreData 托管对象)。出于测试目的,我在 Text(“List car name...”) 中显示了两次名称,然后在 CarRowView 中再次显示了名称。CarRowView 有 car: Car 声明为 ObservedObject。我可以点击一行,进入详细视图,我可以在其中更改汽车名称。当我这样做时,列表会更新为 Text(“List car name...”) 显示新名称,但 CarRowView 不会更改。因此,更改详细信息窗格中的“汽车”,立即显示在列表中(在 Text("List car name..") 中),但即使该汽车对象被发送到 CarRowView,它是一个 ObservedObject,CarRowView显示不变。该应用程序使用 CloudKit,在我进行更改后,新名称在运行相同代码的 iPhone(在 CarRowView 中)上显示正常。