【发布时间】:2012-11-12 06:02:28
【问题描述】:
我正在尝试将图像保存到相机胶卷。这实际上过去工作得很好,但我不得不处理其他事情,现在我要返回项目为 iOS 6 更新它,poof这个功能在 iOS6 上根本不起作用。
我尝试了两种方法,在没有 NSError 对象的情况下,两种方法都静默失败。一、UIImageWriteToSavedPhotosAlbum:
UIImageWriteToSavedPhotosAlbum(img, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);
// Callback
-(void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo
{
// error == nil
}
...和 ALAssetsLibrary 方法:
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
[library writeImageToSavedPhotosAlbum:[img CGImage]
orientation:(ALAssetOrientation)[img imageOrientation]
completionBlock:^(NSURL *assetURL, NSError *error)
{
// assetURL == nil
// error == nil
}
另外,[ALAssetsLibrary authorizationStatus] == ALAuthorizationStatusAuthorized 的计算结果为 true
在模拟器上,该应用永远不会出现在“设置”>“隐私”>“照片”部分,但在实际的 iPad 上,它们确实显示该应用有权访问照片。 (另外,补充一点:上面的第一种方法是我之前使用的——它适用于真实设备和模拟器,没问题)。
我也尝试在主线程上运行它,看看是否改变了任何东西 - 没有区别。我之前在后台运行它,它曾经可以正常工作(在模拟器和设备上)。
谁能解释一下?
【问题讨论】:
-
我在保存到自定义资产组时遇到了这样的问题。除了它会间歇性地工作。我通过在延迟 0.1 后执行选择器解决了这个问题,直到它成功。它似乎总是在第二次尝试时起作用。我能想到的唯一导致此问题的原因是操作系统由于某些锁定问题而阻止了您的写入尝试。我要问的另一件事是,你是从后台线程运行这个吗?如果是这样,是否允许?如果是后台,请从主线程尝试。
-
是的,我尝试在主线程上执行它,结果相同
-
在隐私设置中检查该应用是否被拒绝访问照片。 - 是否调用了
ALAssetsLibraryWriteImageCompletionBlock?assetURL和error都是nil在完成块中吗? -
是的,两者都是零。我将编辑问题以包含该信息。此外,在模拟器上,照片权限不会出现,但在我的 iPad 上,我的应用程序的权限是开放的。
-
另外,由于这是我第一次在 iOS6 中使用此应用在真实设备上执行此操作,当我点击 UIImageWriteToSavedPhotosAlbum 功能时,iOS 触发了允许此应用访问照片的提示,我点击了“是的”,现在该应用程序出现在“设置”>“隐私”>“照片”部分,但没有照片。那时我转而尝试 ALAssetsLibrary,但结果相同。尝试了主线程,结果相同 - 没有保存照片的静默失败,没有错误消息,没有 uri。
标签: objective-c ios