【发布时间】:2022-08-09 03:33:27
【问题描述】:
我有一个可搜索的列表,显示某个数据模型的各种实例,这些实例保存在一个数组中。当点击其中一个列表行时,会打开一个新视图,其中显示有关数据模型的一些信息。出于演示目的,视图打开显示一个随机生成的数字。到目前为止,这按预期工作。
但是,当执行显示多个项目的搜索然后执行仅显示第一个项目的子集的第二次搜索时,在点击所选行后,NavigationLink 会推送到新视图两次。
这个问题很容易用很少的代码复制。 这是我的数据模型:
struct DataModel: Identifiable, Hashable {
let id = UUID()
var name: String
init(name: String = \"unknown\") {
self.name = name
}
static func == (lhs: DataModel, rhs: DataModel) -> Bool {
return lhs.id == rhs.id
}
func hash(into hasher: inout Hasher) {
hasher.combine(id)
}
}
这是我的观点:
var allDataModels = [DataModel]()
struct ContentView: View {
@State var searchDataModels = [DataModel]()
@State var searchText = \"\"
let numbers = Array(1...10)
var body: some View {
NavigationStack {
List {
ForEach(searchDataModels, id: \\.id) { model in
NavigationLink(value: model, label: {
Text(model.name)
})
}
}.searchable(text: $searchText)
.onChange(of: searchText, perform: { _ in
updateSearch()
})
.navigationDestination(for: DataModel.self, destination: { _ in
Text(\"\\(Int.random(in: 1...100))\")})
}.onAppear {
for i in 0...9 {
allDataModels.append(DataModel(name: \"Data \\(numbers[i])\"))
}
}
}
func updateSearch() {
searchDataModels = allDataModels.filter( { $0.name.localizedCaseInsensitiveContains(searchText) } )
}
}
以下视频演示了在执行两次搜索后将 NavigationLink 推送到两个视图。正如视频中所见,屏幕上的数字发生了变化,使得视图之间易于区分。
此问题已在 iOS 16 beta 3 中测试并出现,并在 beta 4 中持续存在。早期版本未经过测试(NavigationStack 和 .navigationDestination(for: , destination:) 是 iOS 16 中的新版本)。
-
看起来像一个错误,值得向 Apple 提交反馈
-
谢谢你,@Asperi,你的评论。我将立即提交错误报告。同时,我将感谢有关如何避免此错误的任何提示。
-
我也会为此提交一份报告,您的电话号码是多少,以便我参考?谢谢
-
谢谢@malhal!我的报告编号是 FB10911352。
标签: ios swift swiftui navigation swiftui-navigationlink