基本上我想要实现的是增强现实应用程序。我有一张地图视图和增强现实视图
当用户仅查看地图视图然后返回到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];
}
答案 0 :(得分:0)
我假设您在其他地方预先分配了图像选择器控制器。这可能是问题 - 当它的视图脱离屏幕时(因为你忽略它),它没有被解除分配,所以它仍然在内存中,并且仍然可能使用它的位置管理器。这是一个错误,但不是你的错误,因此你无法用当前的设置做很多事情。
一个更常见的模式是,当你要呈现它们时,只分配像UIImagePickerController这样的东西,并在调用-presentModalViewController:animated:
后立即释放它们。它可以使您的UI响应性降低,特别是在分配复杂的视图控制器时(我不确定图像选择器控制器是否符合此类条件),但您可以获得减少内存使用的好处,并且希望不再使用位置当你不想要它们时服务。