当 iPhone 上的“可用存储空间不足...”时,相机应用程序不会关闭

Posted

技术标签:

【中文标题】当 iPhone 上的“可用存储空间不足...”时,相机应用程序不会关闭【英文标题】:Camera App doesn't dismiss when "Not enough available storage..." on iPhone 【发布时间】:2012-12-18 18:49:51 【问题描述】:

我有一个应用程序,可以让你用 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];

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

【问题讨论】:

在展示 Picker 之前尝试isSourceTypeAvailable。也许苹果想到了这个案例。 我的代码中实际上已经有isSourceTypeAvailable 作为呈现照片选择器的条件,我只是将其剥离以显示更简单的sn-p。还是谢谢你的贡献!我将用它来编辑原始帖子。 其实我刚刚发现在展示photoPicker之前检查isSourceTypeAvailable不是一个好地方,好像源不可用,它在.sourceType的归属处崩溃了。这仍然没有解决我的问题。不过,我会更新我的原始帖子以反映这一发现。 我的应用面临同样的问题。我很想知道你是如何处理这种情况的。 事实是,我没有。我没有找到任何办法来处理这种情况。 【参考方案1】:

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

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

【讨论】:

我实现了所有这些,但没有成功。该错误与内存不足无关,它与存储空间不足有关。因此,当我打开相机时,我确实得到了 viewDidDisappear 的调用,因为相机控制器替换了当前的控制器,但它没有进入 viewDidUnload 甚至 didReceiveMemoryWarning。感谢您的帮助!

以上是关于当 iPhone 上的“可用存储空间不足...”时,相机应用程序不会关闭的主要内容,如果未能解决你的问题,请参考以下文章

iPhone UIScrollview:当位于 Scroll View 的子 UIView 上的 480 像素以下时,按钮不响应

当 iPhone 的 Appstore 上的应用程序版本更改时,sqlite 数据库更新

openwrt 在无usb的wifi 路由器上用opkg 安装软件

从 iphone 上的 push segue 导航返回时,顶部导航栏变得可见

在 iPhone 屏幕上的任意位置点击时关闭工具提示

查询当前屏幕上的触摸次数而不使用 iPhone 上的事件