UIImagePickerController не остановит службы определения местоположения - PullRequest
1 голос
/ 29 мая 2011

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

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

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

- EDIT-- Вот метод, в котором я представляю средство выбора изображений, очень простой:

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

1 Ответ

0 голосов
/ 29 мая 2011

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

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

...