【发布时间】:2021-07-21 06:53:12
【问题描述】:
我已将我的 Map View 连接到一组自定义 Product 对象,这些对象存储每个注释的相关详细信息(称为 MapAnnotationButton 的自定义注释)。
有可能进行搜索,每次将搜索请求发送到我的后端时,响应都会转换为 Product 对象并保存到数组中(数组的先前内容正在被清除)。然而,由于某种原因,在第一次搜索后,我的地图注释混淆了。每次搜索(相同的短语)时,它都会被打乱。虽然从来没有第一次。
我已经检查过了,但即使在注释创建块中,坐标和名称及其他属性也匹配。
import SwiftUI
import MapKit
struct MapView: View {
@State var keyword = ""
@State private var region = MKCoordinateRegion(center: CLLocationCoordinate2D(latitude: 0, longitude: 0), span: MKCoordinateSpan(latitudeDelta: 0.1, longitudeDelta: 0.1))
@State var products: [Product] = []
var body: some View {
ZStack(alignment: Alignment(horizontal: .center, vertical: .top), content: {
Map(coordinateRegion: $region, annotationItems: self.products, annotationContent: { current_item in
MapAnnotation(coordinate: current_item.location?.CLcoordinates ?? CLLocationCoordinate2D(latitude: 1000, longitude: 1000)) {
MapAnnotationButton(item: current_item)
}
})
TextField("Search", text: $keyword, onEditingChanged: { editing in
}, onCommit: {
UIApplication.shared.endEditing()
BackendClient.shared.query(keyword: keyword) { products, success in
self.products = products ?? []
}
})
})
}
}
我的解释是,当注释创建块被调用时,根据其内容,大约是 products 中包含的项目数的 2 倍 - 4 倍,可能在正确的注释之上存在注释。这意味着它似乎只是混淆了,实际上只有其他注释阻止了下面的正确注释。
然而,实际上每个注释都应该放在正确的位置,绝不允许发生这样的事情。
我会非常感谢您的提示和想法! 谢谢!
第一次搜索:
第二次搜索:
【问题讨论】:
-
你能解释一下你所说的洗牌是什么意思吗?为什么洗牌是个问题?
-
对不起,我的错。当我再次查询时,注释会随机重新排列。这不应该是这样,因为
Product的每个项目都被分配了一个特定的位置。 -
您将动词 shuffled 替换为 rearranged。这没有帮助。你怎么知道/看到注释被打乱了,为什么这是一个问题?
-
我添加了两张图片;我希望他们提供更多背景信息。
-
现在很清楚了。你能添加
Product和MapAnnotationButton的代码吗?