为啥 SwiftUI ObservedObject 不能在列表行中工作?

Posted

技术标签:

【中文标题】为啥 SwiftUI ObservedObject 不能在列表行中工作?【英文标题】:Why would SwiftUI ObservedObject not work in a List Row?为什么 SwiftUI ObservedObject 不能在列表行中工作? 【发布时间】:2019-11-20 07:16:47 【问题描述】:

我遇到了一个问题,即主窗格列表视图行在 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 中)上显示正常。任何想法为什么 CarRowView 不会在 iPad 的主窗格上更新?

【问题讨论】:

阅读例如this主题...并且,一般来说,尝试搜索 - 这里有很多类似的主题 感谢您的阅读。但是,我认为 fetchrequest 没有问题——List 确实在 TextView 中显示了对“car”的更改——并将更改后的“car”发送到 CarRowView,但 CarRowView 没有显示更改。 我的 iPad 从 13.2 更新到 13.3 - 现在可以正常使用了!! 【参考方案1】:

看起来这是一个 SwiftUI 错误,而不是代码的问题,因为它现在适用于 13.3。

【讨论】:

以上是关于为啥 SwiftUI ObservedObject 不能在列表行中工作?的主要内容,如果未能解决你的问题,请参考以下文章

通用结构 'ObservedObject' 要求 'Video' 符合 SwiftUI 中的 'ObservableObject'

SwiftUI - 尽管使用了 @Published 和 @ObservedObject,但视图不会更新

SwiftUI:如何在 Pageable 中访问 ObservedObject?

SwiftUI - ObservedObject 永远不会被释放

SwiftUI:@ObservedObject 与 @StateObject 子视图性能?

SwiftUI - 如何基于@ObservedObject 为每个列表视图项创建编辑视图