在iPhone上"没有足够的可用存储空间......"时,Camera App不会被忽略

man*_*sta 7 camera objective-c ios

我有一个应用程序让你用iphone相机拍照.一切都像魅力一样,但是在新设备上进行测试时,没有足够的存储空间可用,相机应用程序并没有消失.

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

在我的代码中,我用相似的东西调用相机:

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

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

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info;
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker;
Run Code Online (Sandbox Code Playgroud)

这种"无空间可用"行为不会落在任何委托方法上,因此我无法以编程方式关闭相机应用程序.

有什么想法吗?

编辑:

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

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

这仍然无法解决我的问题,但这是一个有趣的发现.

JOM*_*JOM 1

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

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