SwiftUI 在异步更新 @Published 属性后重新呈现非活动视图

时间:2021-04-07 09:43:11

标签: swiftui combine swiftui-navigationlink swiftui-navigationview

我们正在使用带有 NavigationView 的 SwiftUI。

我们有一个视图(ParentView)通过其视图模型(ParentViewModel)异步更新其数据,然后根据新数据重新渲染其主体。当我们通过 NavigationLink 进入第二个视图(ChildView)后调用完成块时,会出现问题,例如应用自动导航回第一个视图,无需任何用户交互,或在第二个视图中丢失完成块调用。

struct ParentView: View {

    @ObservedObject private var viewModel = ProjectListViewModel()

    var body: some View {
        ForEach(viewModel.items) { item in
            NavigationLink(destination: ChildView(item: item)) {
                Text(item.label)
            }
        }.onAppear(perform: viewModel.loadData))
    }
}

class ParentViewModel: ObservableObject {

    @Published var items: [Item] = []

    func loadData() {
        loadDataAsynchronously { [weak self] newItems in
            // Problems occur if this completion block is called after we have entered ChildView
            self?.items = newItems
        }
    }
}

class Item: Identifiable { ... }

此错误发生在模拟器和物理设备上。

0 个答案:

没有答案