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"];
}
Спасибо всем за помощь и, надеюсь, это поможет хоть кому-то...