当 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 安装软件