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

Posted

技术标签:

【中文标题】iOS5将图像保存到自定义文件夹,ALAssetsLibrary 失败【英文标题】:iOS5 Saving images to custom folder, ALAssetsLibrary fail 【发布时间】:2012-06-26 13:27:36 【问题描述】:

---- Aalok 已经回答了这个问题,我只是在等他把它写下来,这样我才能选择它作为正确答案。在那之前,除了进行他在下面描述的更改之外,我还必须调用 -- self.library = [[ALAssetsLibrary alloc] init]; - 在每次尝试保存我的图像之前。作为预防措施,我还停止了 AVSession 的运行,直到保存后重新启动(使用 [session stopRunning]; 和 [session startRunning]; -----

----- 编辑 2:您无需停止并重新启动 AV 会话,对此进行了彻底的测试,并且运行良好。 -----

----- 编辑 3:在我的设备上彻底测试后,它运行良好,一旦通过审查过程并放入商店,代码就无法正常工作。运行相同操作系统的两台相同设备(2x iPhone 4),一台使用我的开发版本,一台关闭应用程序,应用商店版本仍然存在错误。暂时放弃 -----

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

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

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

    if ([group valueForProperty:ALAssetsGroupPropertyURL] == nil)

NSLog(@”group properties are nil!”);
 else 
[group addAsset:asset];

我有,它确实检测属性是否为零。所以一切都很好。我当时正在努力设置属性并保存图像。我猜这个时候我们可以手动设置albumName并保存图片,我试过了,但是还是会报错。

有什么想法吗?谢谢。

【问题讨论】:

如果您停留在同一个视图上,这很好,但如果您通过推送导航导航到其他视图,您必须停止会话,否则它会在第三次拍摄图像和导航时给您错误到下一个视图并尝试保存图像 好的,谢谢。在我的应用程序中,我删除了在发生这种情况时执行任何操作的能力,所以这不是问题,但在未来的版本中,我会考虑到这一点。 【参考方案1】:

我在使用相同的 .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,并在成功保存图像后显示一条弹出消息,指示图像以专辑名称保存在专辑中。虽然这一次用户界面没有响应,即用户除了按下设备的主页按钮之外不能做任何事情:) ;)

快乐编码:)

【讨论】:

如果有任何问题,请告诉我,因为这解决了我描述的问题:) 在第二个函数中,您的更改是高于还是低于 __block BOOL albumWasFound = NO;线?我今晚很晚才回家试试这个。感谢发帖:) 遗憾的是,这对我不起作用,我保存了三张图像,每次只保存三张图像,第三张总是给我一个“组属性为零”的问题,并且只保存到相机卷。如果有帮助,我可以确定代码? 不幸的是这里也一样... :( 其实是随机的,所以没有变化。苹果真的需要解决这个问题。

以上是关于iOS5将图像保存到自定义文件夹,ALAssetsLibrary 失败的主要内容,如果未能解决你的问题,请参考以下文章

将捕获的图像从相机保存到自定义文件夹

如何使用 react-native-camera 将捕获的图像保存到自定义应用程序特定文件夹

如何将图像保存到自定义相册?

iOS 5 - ALAssets 库 - 将视频的 URL 从资产转换为 NSDATA 文件

Phonegap(cordova)将图像保存到自定义相册

如何将图像保存到自定义相册?