【问题标题】:UIImagePickerController won't stop location servicesUIImagePickerController 不会停止位置服务
【发布时间】:2011-05-29 17:45:20
【问题描述】:

基本上我想要完成的是一个增强现实应用程序。我有地图视图和增强现实视图。
当用户只查看地图视图然后返回 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];
}

【问题讨论】:

  • 你能发布你呈现UIImagePickerController对象的方法吗?
  • 你去吧,我将它添加到原始问题中,该方法仅在用户想要离开地图视图并转到增强现实视图时才被调用,并且只有在按下该按钮之后出现问题。我在 viewDidLoad 方法中初始化 imagepicker
  • 不清楚按钮是map view的一部分还是image picker view的一部分?您发布的原始代码是在点击按钮时调用的,对吧?
  • 调用 presentmodalview 的按钮在持有地图视图的 UIView 上。当地图视图或图像选择器视图按下“停止”时,我发布的原始代码块被调用

标签: iphone ios uiimagepickercontroller cllocationmanager


【解决方案1】:

我假设您提前在别处分配图像选择器控制器。这可能是问题所在——当它的视图离开屏幕时(当你关闭它时),它并没有被释放,所以它仍然在内存中并且可能仍在使用它的位置管理器。这是一个错误,但不是您的错误,因此您将无法使用当前设置对此做太多事情。

一个更常见的模式是只在你将要呈现 UIImagePickerController 之类的东西时分配它们,并在调用 -presentModalViewController:animated: 后立即释放它们。它可以使您的 UI 响应速度稍慢一些,尤其是在分配复杂的视图控制器时(我不确定图像选择器控制器是否符合条件),但是您可以从减少内存使用和 - 希望 - 不再使用位置的好处不需要时提供服务。

【讨论】:

  • 在我发布这个问题之前,我实际上已经尝试过了。我在离开屏幕之前“释放”了它,它仍然显示位置服务通知。我尝试了您建议的更常见的模式,懒惰地初始化它并在它出现后立即释放它,不幸的是仍然得到同样的错误,它在退出时显示仍然在顶部工具栏中的小箭头
猜你喜欢
  • 2020-01-28
  • 2011-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-13
  • 2013-07-29
  • 1970-01-01
  • 2017-11-05
相关资源
最近更新 更多