7

我有一个应用程序,可以让你用 iPhone 相机拍照。一切都像魅力一样,但是在碰巧没有足够可用存储空间的新设备上进行测试时,相机应用程序并没有关闭。

所以基本上我用源相机打开图像选择器,我得到一个弹出窗口,上面写着“没有足够的可用存储空间来拍照......”然后当我按下确定时,我在相机应用程序中,快门关闭,“拍照”和“取消”按钮都变灰了。从这一点开始,我唯一能做的就是杀死应用程序,因为没有办法离开这个屏幕。

在我的代码中,我用以下方式调用相机:

UIImagePickerController * photoPicker= [[UIImagePickerController alloc] init];
photoPicker.delegate = self;
photoPicker.sourceType = UIImagePickerControllerSourceTypeCamera;
if ([UIImagePickerController isSourceTypeAvailable:photoPicker.sourceType]) {
    [self presentModalViewController:photoPicker animated:YES];
}

调用它的对象当然是 UIImagePickerControllerDelegate 并且我实现了两个委托方法(都正确响应成功和取消事件):

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info;
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker;

这种“没有可用空间”行为不属于任何委托方法,因此我无法以编程方式关闭相机应用程序。

有什么想法吗?

编辑:

当尝试在相机不可用的模拟器中运行应用程序时,我注意到应用程序崩溃,因为该源不可用。我发现即使在调用控制器之前,简单地将不可用的 sourceType 分配给 photoPicker,也会使应用程序崩溃,因此我将代码更改为以下内容:

UIImagePickerController * photoPicker= [[UIImagePickerController alloc] init];
photoPicker.delegate = self;
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
    photoPicker.sourceType = UIImagePickerControllerSourceTypeCamera;
}else{
    return;
}
[self presentModalViewController:photoPicker animated:YES];

这仍然不能解决我的问题,但这是一个有趣的发现。

4

1 回答 1

1

问题不在于相机,而在于应用程序的其余部分:相机已经欺骗didReceiveMemoryWarning并因此“杀死”了您试图返回的视图。它不再存在了。

修复方法是实现 UIViewController 的 viewDidLoad、viewDidUnload、viewWillDisappear、viewWillAppear 等,并确保您的应用可以处理由 Camera 引起的内存不足的情况,并在 Camera 消失时初始化所需的一切。

于 2012-12-19T13:02:40.190 回答