Я должен показать кластеризованные метки в моем приложении. Когда я добавляю метки через ddPlacemarkWithPoint:
, это работает. Но когда мне нужно удалить некоторые из них, у меня возникает проблема. YMKClusterizedPlacemarkCollection
имеет только clean
метод, который удаляет все отметки. Если я удаляю все отметки и затем добавляю их часть обратно, я вижу мигающие булавки на моей карте. Затем я пытаюсь удалить отметку с mapView.map.mapObjects
через removeWithMapObject:
. И это вызывает исключение и крэ sh. *** Assertion failure in -[YMKMapObjectCollection removeWithMapObject:], ../../../../../../../../idl/ios/impl/YandexMapKit/YMKMapObjectCollection_Binding.mm:398
Вот мое «пустое» приложение, которое воспроизводит проблему:
@IBOutlet var mapView: YMKMapView!
var mapWindow: YMKMapWindow! {
return mapView.mapWindow
}
var map: YMKMap! {
return mapWindow.map
}
var placemarks = [YMKPlacemarkMapObject]()
var placemarksCollection: YMKClusterizedPlacemarkCollection!
override func viewDidLoad() {
super.viewDidLoad()
setupMap()
addClusters()
// addPointsOnMap()
addPointsToCollection()
DispatchQueue.main.asyncAfter(deadline: .now() + 3.5) {
self.removePoints()
}
}
func setupMap() {
let cameraPosition = YMKCameraPosition(target: YMKPoint.moscow,
zoom: 13,
azimuth: 0,
tilt: 0)
map.isDebugInfoEnabled = true
map.move(
with: cameraPosition,
animationType: YMKAnimation(type: .smooth, duration: 0.3),
cameraCallback: nil)
}
func addClusters() {
placemarksCollection = map.mapObjects.addClusterizedPlacemarkCollection(with: self)
}
func addPointsOnMap() {
for _ in 0..<5 {
let placemark = map.mapObjects.addPlacemark(with: YMKPoint(latitude: YMKPoint.moscow.latitude + Double(arc4random() % 10)/1000, longitude: YMKPoint.moscow.longitude + Double(arc4random() % 10)/1000))
placemarks.append(placemark)
}
}
func addPointsToCollection() {
for _ in 0..<5 {
let placemark = placemarksCollection.addPlacemark(with: YMKPoint(latitude: YMKPoint.moscow.latitude + Double(arc4random() % 10)/1000, longitude: YMKPoint.moscow.longitude + Double(arc4random() % 10)/1000))
placemarks.append(placemark)
}
placemarksCollection.clusterPlacemarks(withClusterRadius: 60, minZoom: 10)
}
func removePoints() {
if let placemark = placemarks.last {
map.mapObjects.remove(with: placemark)
}
}