У меня есть MKMapView
с некоторыми аннотациями, добавленными кодом, представляющим пользователей, разделяющих их местоположение. Я получаю обновления об изменениях местоположения через веб-сокеты и обновляю соответствующие MKAnnotation
. coordinate
, которые представляют аннотации в MKMapView
.
Это в основном работает нормально, я вижу, как пользователи перемещаются по карте. Проблема заключается в том, что когда MKAnnotation.cooridnate
обновляется, когда пользователь перемещает или увеличивает карту, то MKMapView
падает, сообщая, что таблица ha sh была обновлена во время оценки. В основном это проблема: сбой MKMapView при масштабировании при добавлении аннотаций
Обновление: сбой происходит только при включенной кластеризации, не нужно даже панорамировать или масштабировать, обычно достаточно просто немного подождать .
Рекомендованное решение ничего не делает (например, обновление MKAnnotation.cooridnate
в моем случае) с MKMapView
между regionWillChangeAnimated
и regionDidChangeAnimated
, и я пытаюсь реализовать это.
Проблема в том, что мои данные принимаются через веб-сокеты, поэтому я не могу просто «прекратить» прослушивание новых данных между этими двумя методами делегатов. Теоретически я могу, но это означало бы потерю некоторых данных, которые не являются решением.
Моя идея заключалась в том, что мне нужна какая-то очередь, которую я буду использовать для добавления своих обновлений в MKAnnotation.cooridnate
и буду приостанавливаться в regionWillChangeAnimated
и возобновлено в regionDidChangeAnimated
.
Я пытался использовать DispatchQueue
описанным способом, но через некоторое время он блокируется. Я не уверен, если это из-за большого количества операций, добавляемых к нему или звонков на suspend
и resume
. Если он не блокируется, он просто через некоторое время вылетает из приложения.
У меня вопрос, какой механизм будет работать здесь?
Как указано в заголовке вопроса, мне в основном нужен способ сделать некоторые методы ожидают условия, скажем, переключение флага между regionWillChangeAnimated
и regionDidChangeAnimated
, который является надежным и может принять нагрузку.