我们正在使用带有 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 { ... }
此错误发生在模拟器和物理设备上。