为什么SwiftUI ObservedObject在列表行中不起作用?

时间:2019-11-20 07:16:47

标签: swiftui master-detail combine swiftui-list

我有一个问题,其中主窗格列表视图行在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(“列出汽车名称...”)中,然后在CarRowView中再次显示该名称。 CarRowView有car:Car声明为ObservedObject。 我可以点击一行进入详细视图,在这里我可以更改汽车名称。当我这样做时,列表会更新,因为Text(“列表汽车名称...”)显示了新名称,但CarRowView并未更改。 因此,在详细信息窗格中更改“ car”后,立即在列表中显示(以Text(“ List car name ..”))显示,即使该汽车对象被发送到CarRowView(它是一个ObservedObject),CarRowView显示不变。  该应用程序使用CloudKit,在进行更改后,新名称在运行相同代码的iPhone(在CarRowView中)上显示为正常。有什么想法为什么CarRowView无法在iPad的主窗格上更新?

1 个答案:

答案 0 :(得分:0)

这似乎是一个SwiftUI错误,而不是代码问题,因为它现在可以与13.3一起使用。