首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ALAssetLibrary保存到相册时失败

使用ALAssetLibrary保存到相册时失败
EN

Stack Overflow用户
提问于 2015-09-10 13:49:53
回答 1查看 680关注 0票数 1

我试图保存一些图像,我生成了一个专辑使用ALAssetLibrary使用ALAssetsLibrary+CustomPhotoAlbum由马林托多罗夫。然而,我大多数时候都是随机失败的。

代码语言:javascript
复制
  // Get the asset library instance.
  ALAssetsLibrary *library = [ALAssetLibraryManager defaultAssetsLibrary];
  [self.imageModels enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
    // Sidenote: Trying to use an image that I have locally in my image assets fails as well.
    // UIImage *image = [UIImage imageNamed:@"Background-light-png.png"];
    UIImage *image = [UIImage imageWithContentsOfFile:[obj valueForKey:@"imagePath"]];
    [_imagesToShare addObject:image];
    if (image){
        [library saveImage:image toAlbum:@"My Album" completion:^(NSURL assetURL, NSError error) {
            NSLog(@"Success");
        } failure:^(NSError *error) {
            NSLog(@"Failed %@", error.description);
        }];
    }
}];

在failure块中,如果我添加以下代码,我可以看到图像被保存到相机滚筒中。

代码语言:javascript
复制
UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);

我得到的错误是

代码语言:javascript
复制
Failed: Error Domain=LIB_ALAssetsLibrary_CustomPhotoAlbum Code=0 "ALAssetsGroup failed to add asset." UserInfo=0x171277c80 {NSLocalizedDescription=ALAssetsGroup failed to add asset.}

获取资产库的代码

代码语言:javascript
复制
+ (ALAssetsLibrary *)defaultAssetsLibrary {
   static dispatch_once_t pred = 0;
   static ALAssetsLibrary *library = nil;
   dispatch_once(&pred, ^{
        library = [[ALAssetsLibrary alloc] init];
   });
   return library;
}

我搜索了很多,但在这个话题上找不到多少。我的方法是通过单击按钮调用的,不应该同时发生其他写操作。我在网上发现的唯一信息是,您应该保留相同的ALAssetLibrary实例,这是我使用singleton类完成的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-10 13:59:22

以下是我如何使用资产库来保存图像:

代码语言:javascript
复制
 ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
[library writeImageToSavedPhotosAlbum:((UIImage *)[info objectForKey:UIImagePickerControllerEditedImage]).CGImage
                             metadata:[info objectForKey:UIImagePickerControllerMediaMetadata]
                      completionBlock:^(NSURL *assetURL, NSError *error) {
                          NSLog(@"assetURL %@", assetURL);
                            imageURL=[assetURL absoluteString];

                          [[NSUserDefaults standardUserDefaults] setObject:imageURL forKey:@"imageurl"]; //for reference of the path

                      }];
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32503742

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档