Это из-за способа работы MKMapView
.Ожидается операция, поэтому MapKit сохраняет MKMapView
, и он еще не был освобожден.Это само по себе не проблема.Проблема заключается в том, что он по-прежнему отправляет сообщения вашему делегату.
Обходной путь прост: как часть очистки контроллера представления установите делегата представления карты на nil
, что предотвратит отправку сообщений на MKMapView
it.
Это задокументировано в Справочник по протоколу MKMapViewDelegate :
Перед выпуском объекта MKMapView, для которого вы установили делегат, не забудьте установить делегат этого объектасобственность на ноль.Единственное место, где вы можете сделать это, - это метод dealloc, где вы избавляетесь от вида карты.
Редактировать: Поднимите также Оскара, чуть ниже, который предоставил цитату документации здесь.
Учитывая ARC, я полагаю, это означает, что вы должны установить делегат вашего вида карты на nil
в контроллере вашего вида dealloc
.