MapKit / Location Manager вылетает приложение при выгрузке представления - PullRequest
7 голосов
/ 25 марта 2010

У меня есть ошибка, из-за которой в моем приложении произошел сбой «EXC_BAD_ACCESS», когда я нажал клавишу «Назад» на панели навигации и выгрузил представление, в котором был MapKit (mapView) и использовался диспетчер расположений.Несколько дней пытался исправить ошибку и, наконец, придумал исправление для всех, кто сталкивался с этой проблемой:

Добавьте этот код в ваш dealloc

- (void)dealloc {
    mapView.delegate = nil;
    locationManager.delegate = nil;

    [mapView release];
    [locationManager release];
}

1 Ответ

0 голосов
/ 18 февраля 2012

У меня тоже было это, :) И, да, это исправление на самом деле правильное;

- (void)dealloc {
  mapView.delegate = nil;
  locationManager.delegate = nil;

  [mapView release];
  [locationManager release];
}

Что происходит за кадром, так это:

  1. Вы нажали клавишу возврата. Это выгружает и, следовательно, освобождает контроллер, который содержит mapView. Поскольку вполне вероятно, что только одна ссылка на контроллер будет освобождена, тогда.

  2. LocationManager, однако, вполне вероятно, все еще упоминается где-то во внутренней работе Photos.

  3. Если locationManager и / или mapView теперь отправляют уведомление соответствующему делегату, они следуют за неверным указателем. Что приведет к исключению EXC_BAD_ACCESS.

Да: обзывать делегатов, которые указывают на себя, всегда хорошая идея. Я просто хотел, чтобы Apple добавила туда немного автоматики.

...