UIImagePickerController не останавливает службы определения местоположения

В основном то, что я пытаюсь сделать, - это приложение дополненной реальности. У меня есть вид карты и вид дополненной реальности.
Когда пользователь смотрит только на вид карты, а затем возвращается на предыдущую страницу в стеке UINavigation, все службы определения местоположения останавливаются, а уведомление на панели инструментов со стрелками исчезает. Когда пользователь покидает представление карты и UIImagePickerController представлен модально, уведомление служб определения местоположения останется даже после того, как пользователь нажмет кнопку, которая отвечает за остановку всех служб определения местоположения и отображение текущего представления. Я знаю, что проблема не в моем CLLocationManager, потому что, как я уже сказал, ошибка не возникает, когда UIImagePicker никогда не помещается на экран. Я считаю, что службы определения местоположения, используемые для геолокации или того, для чего их использует камера, не останавливаются, даже если я затемняю модальный вид перед тем, как открыть текущий вид.
На всю жизнь я не могу понять, почему они не остановка, если кто-нибудь знает, почему это было бы огромной помощью.

Вот код, который у меня есть прямо сейчас в методе, который вызывается для подготовки к извлечению представления из стека UINavigation.

[_locationManager setDelegate:nil];
[_locationManager stopUpdatingLocation];
[_locationManager stopUpdatingHeading];
[[UIAccelerometer sharedAccelerometer] setDelegate:nil];
if (_imagePickerOn){
    [self dismissModalViewControllerAnimated:YES];   
    _imagePickerOn = FALSE;
}

- РЕДАКТИРОВАТЬ - Вот метод, в котором я представляю средство выбора изображений, очень простой:

- (IBAction) cameraButtonPressed{
_imagePickerOn = TRUE;
[self presentModalViewController:_imagePicker animated:NO];
}

person JLoewy    schedule 29.05.2011    source источник
comment
Можете ли вы опубликовать метод, в котором вы представляете объект UIImagePickerController?   -  person Deepak Danduprolu    schedule 29.05.2011
comment
Итак, я добавил его к исходному вопросу, этот метод вызывается только тогда, когда пользователь хочет покинуть представление карты и перейти к представлению дополненной реальности, и только после нажатия этой кнопки возникает проблема. Я инициализирую imagepicker в методе viewDidLoad   -  person JLoewy    schedule 29.05.2011
comment
Неясно, является ли кнопка частью вида карты или окна выбора изображений? Исходный код, который вы опубликовали, вызывается нажатием кнопки, верно?   -  person Deepak Danduprolu    schedule 29.05.2011
comment
Кнопка, которая вызывает Presentmodalview, находится на UIView, который содержит вид карты. Исходный блок кода, который я опубликовал, вызывается, когда либо в представлении карты, либо в представлении выбора изображений нажимается 'стоп'   -  person JLoewy    schedule 29.05.2011


Ответы (1)


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

Более распространенный шаблон - выделять такие вещи, как UIImagePickerController, только когда вы собираетесь их представить, и освобождать их сразу после вызова -presentModalViewController:animated:. Это может сделать ваш пользовательский интерфейс немного менее отзывчивым, особенно при выделении сложного контроллера представления (я не уверен, что контроллер выбора изображений соответствует таковому), но вы получаете преимущество уменьшения использования памяти и, надеюсь, отказа от использования местоположения. услуги, когда они вам не нужны.

person Noah Witherspoon    schedule 29.05.2011
comment
Прежде чем я опубликовал этот вопрос, я действительно пробовал это. Я «отпустил» его прямо перед тем, как уйти с экрана, и он по-прежнему показывал уведомление служб определения местоположения. Я попробовал более распространенный шаблон, который вы предложили, лениво инициализировав его и отпустив сразу после его представления, и, к сожалению, все еще получаю ту же ошибку, он показывает маленькую стрелку все еще на верхней панели инструментов после выхода - person JLoewy; 29.05.2011