Exc_bad_acces в didUpdateLocations, когда приложение становится активным

В моем приложении iOS7 у меня есть синглтон под названием ICVModel. Когда приложение запускается, этот синглтон инициализируется и создает CLLocationManager который сразу начинает обновлять местоположение. Это отлично работает, CLLocationManager сильная собственность в ICVModel, Я реализовал didUpdateLocations: всегда сохранять последнее местоположение в ICVModelСильная собственность на этот синглтон.

Моя проблема в том, что когда приложение переходит в фоновый режим, а затем снова становится активным, я всегда получаю EXC_BAD_ACCESS в didUpdateLocations:

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
    [ICVModel sharedSingleton].lastLocation = [locations lastObject]; //EXC_BAD_ACCESS
}

Кроме того, мое приложение использует уведомления на основе регионов, поэтому не возможно ли, чтобы в этом случае этот метод вызывался, когда приложение находится в фоновом режиме (а ICVModel освобождается?)?

Понятия не имею почему... Большое спасибо!

1 ответ

Починил это. Проблема была в другом. В одном ViewController я добавил наблюдателя для этого изменения свойства lastLocation и не удалил его... когда приложение перешло в фоновый режим, VC был освобожден (я сделал это вручную), но синглтон все еще работал и пытался вызвать Наблюдение ValueForKeyPath:ofObject: для освобожденного объекта (-> EXC_BAD_ACCESS).

В основном это вызвало проблему (в некоторых VC):

[[ICVModel sharedSingleton] addObserver:self
                                 forKeyPath:@"lastLocation"
                                    options:NSKeyValueObservingOptionNew
                                    context:NULL];

и это исправило это:

- (void)viewDidDisappear:(BOOL)animated {
    [[ICVModel sharedSingleton] removeObserver:self
                                    forKeyPath:@"lastLocation"];
}

Спасибо всем за помощь и, надеюсь, это поможет хоть кому-то...

Другие вопросы по тегам