Не могу установить делегат CLLocationManager равным нулю - PullRequest
0 голосов
/ 12 декабря 2011

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

- (void)dismissSelfCon {
    NSLog(@"dismiss");
    [locationManager stopUpdatingHeading];
    [locationManager stopUpdatingLocation];
    locationManager.delegate = nil;
    mapView.delegate = nil;
    [[NSNotificationCenter defaultCenter] removeObserver:self];

    [[[Trail_TrackerAppDelegate appDelegate] navCon] popViewControllerAnimated:YES];
}

В одной ситуации, если на mapView размещена аннотация (я не уверен, что это определяющая характеристика, но я думаю, что это так), этот метод вызывается (и я уверен, что он вызывается, потому что @ "dismiss" выводится на консоль), но менеджер местоположений не прекращает отправку обновлений местоположений! Кроме того, поскольку для делегата не задано значение nil, приложение аварийно завершает работу, поскольку контроллер представления получает responsedsToSelector: от одного из объектов, делегатом которого он является.

Как это возможно?

Ответы [ 2 ]

0 голосов
/ 12 декабря 2011

Решение было таким:

То, как у меня настроен контроллер вида (что немного странно, я знаю, и я пытаюсь что-то изменить / исправить, если вы увидите мой вопрос здесь: Невозможно выделить CLLocationManager ), CLLocationManager выделяется, набор делегатов и т. д. в viewDidAppear. Я представляю MFMessageComposeViewController во время приложения, и когда оно закрывается, снова вызывается viewDidAppear, перераспределяя CLLocationManager и вызывая мою проблему. Немного логического волшебства я настроил код viewDidAppear так, чтобы CLLocationManager устанавливался и выделялся только один раз.

0 голосов
/ 12 декабря 2011

Наиболее вероятной причиной этого является то, что locationManager на данный момент составляет nil. Первое правило: всегда используйте аксессоры; не получайте прямой доступ к вашим иварам, за исключением init и deallloc.

Я подозреваю из вашего описания, что этот объект (объект с dismissSelfCon) не очищает locationManager.delegate во время dealloc, и что вас освобождают, не вызывая dismissSelfCon.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...