iOS5将图像保存到自定义文件夹,ALAssetsLibrary失败

时间:2012-06-26 13:27:37

标签: ios5 save alassetslibrary

<><> ---- Aalok回答了这个问题,我只是在等他写出来,所以我可以选择那个作为正确的答案。在此之前,随着他在下面描述的更改,我不得不调用 - self.library = [[ALAssetsLibrary alloc] init]; - 每次尝试保存图像之前。作为预防措施,我也停止了AVSession的运行,直到保存,重启后(使用[session stopRunning];和[session startRunning]; -----<><>

<><> -----编辑2:你不需要停止并重新启动AV会话,彻底测试它并且它工作正常。 -----<><>

<><> -----编辑3:在我的设备上彻底测试后,它完美地工作,一旦完成审查过程并放在商店,代码就无法运行。两个相同的设备(2x iPhone 4)运行相同的操作系统,一个使用我的开发构建,一个关闭app sotre,ap商店版本仍然有bug。现在放弃这个-----<><>

我正在使用此链接中的类别尝试保存到自定义文件夹:

http://www.touch-code-magazine.com/ios5-saving-photos-in-custom-photo-album-category-for-download/

现在它在某些时候有效,但不是全部。在评论中,有人建议以下代码检测组属性是否为零:

    if ([group valueForProperty:ALAssetsGroupPropertyURL] == nil)
{
NSLog(@”group properties are nil!”);
} else {
[group addAsset:asset];
}

我有,它确实检测属性是否为零。一切都很好。我正在努力的是在那时设置属性并保存图像。我猜这时我们可以手动设置albumName并保存图片,我已经尝试了,但错误仍然存​​在。

有什么想法吗?谢谢。

1 个答案:

答案 0 :(得分:4)

我在同一个.h和.m文件中遇到了同样的问题,但在工作2到3天后找到一个解决方案,解决方案非常简单,我需要更改的是.m文件中的

-(void)saveImage:(UIImage*)image toAlbum:(NSString*)albumName withCompletionBlock:(SaveImageCompletion)completionBlock

并在

-(void)addAssetURL:(NSURL*)assetURL toAlbum:(NSString*)albumName withCompletionBlock:(SaveImageCompletion)completionBlock

方法我只是在调用内部方法

之前添加它
//THE CHANGE dispatch_async(dispatch_get_main_queue(),^{ //
[self writeImageToSavedPhotosAlbum:image.CGImage orientation:(ALAssetOrientation)image.imageOrientation completionBlock:^(NSURL* assetURL, NSError* error) 
    {
        //error handling
        if (error!=nil) 
        {
            completionBlock(error);
            return;
        }
        //add the asset to the custom photo album
        [self addAssetURL: assetURL toAlbum:albumName withCompletionBlock:completionBlock];
    }];
//THE CHANGE }); //

与另一个相同

快乐编码:)

修改

在第二种方法中,我在每completionBlock(nil);

下面添加一行
[[NSNotificationCenter defaultCenter] postNotificationName:kSaveSuccess object:nil];

我使用此通知确保图像也保存在相册中。直到那时我用一些短信显示UIActivityIndicator并且在成功保存的图像之后显示一条弹出消息,表示图像保存在具有专辑名称的专辑中。虽然这次UI没有响应,即用户无法做任何事情,然后按设备的主页按钮:);)

快乐编码:)