Сбой с MKMapView, когда я использую popviewcontroller - PullRequest
1 голос
/ 16 января 2012

У меня проблема с приложением.

Ответы [ 2 ]

1 голос
/ 16 января 2012

Вам необходимо установить свойство delegate вида карты на nil в -viewDidUnload:.Этот сбой происходит из-за того, что представление карты попыталось сообщить о своем делегате, вашем контроллере представления, но оно уже было освобождено после извлечения из стека.

Apple даже упоминает об этом, передавая MKMapViewDelegate Ссылка на протокол .

Перед выпуском объекта MKMapView, для которого вы установили делегата, не забудьте установить для этого объекта delegate собственность до nil.Единственное место, где вы можете сделать это, - это метод -dealloc, где вы избавляетесь от вида карты.

Они рекомендуют обнулять delegate в -dealloc, но потому чтоARC, -viewDidUnload - лучшая ставка для продвижения вперед.

- (void)viewDidUnload
{
    self.mapView.delegate = nil;
    self.locationManager.delegate = nil;
    [super viewDidUnload];
}
0 голосов
/ 16 января 2012

Это распространенная проблема при использовании объектов, которые получают вызовы делегатов. Проблема заключается в том, что после освобождения контроллера представления он все еще получает вызов от одного из своих объектов, как говорится в сообщении об ошибке. Вам необходимо переопределить метод viewDidUnload (не говоря уже о dealloc для некоторого управления памятью) вашего контроллера представления, и в него нужно поместить что-то вроде:

yourMapView.delegate = nil;
yourLocationManager.delegate = nil;

установив для делегатов этих объектов значение nil, они прекратят отправку обновлений назначенным им делегатам, когда этот контроллер представления будет выгружен, и, следовательно, ваше приложение перестанет падать.

...