解决iOS8.0以上系统下无法通过代码创建被删除过的同名相册 ( iOS 8 Photos framework: Create a albums with iOS8 )

来源:互联网 发布:有赞 知乎 编辑:程序博客网 时间:2024/06/06 03:18

问题描述:

在苹果的 iOS8.0以上, 当你创建完一个相册, 例如名为"Rd", 然后在相册中手动删除了这个"Rd"相册, 再次通过代码

#import <AssetsLibrary/ALAssetsLibrary.h>
 ALAssetsLibrary *assetsLibrary = [[ALAssetsLibrary alloc] init];                                                                                                                                                                                                           [assetsLibrary addAssetsGroupAlbumWithName:@"Rd" resultBlock:^(ALAssetsGroup *group){  [groups addObject:group];}
failureBlock:nil];

以上代码在 iOS 8.0+ 从未创建过 "Rd" 这个相册的 iPhone 或者 iPad 上面可以成功创建相册"Rd" ;

在 iOS 8.0 以下是无论什么情况下都可以创建;

但是在iOS 8.0+ 上如果是已经创建过 "Rd" 这个相册, 然后 "Rd" 相册 被手动删除后的 iPhone 或者 iPad 上面, 代码执行后 group 是 nil ;

 

问题分析:

个人感觉是跟 iOS 8.0 之后, 相册新增了 Recently Deleted (最近删除) 这个功能, 导致我们在相册里边手动删除 "Rd"相册 是并没有完全删除, 导致创建相册虽然成功, 但却为 nil ,因为创建的相册还是处于 Recently Deleted 的状态;

 

解决方案:

既然发现无法创建后, 查阅官方文档, 发现这么一段话

(在 iOS 8.0 后, 使用the Photos framework 代替 the Assets Library framework , The Photos framework 提供更特色和更好的表现 在使用 photo library 工作的时候)

苹果官方Photo Framework例子:

https://developer.apple.com/devcenter/download.action?path=/wwdc_2014/wwdc_2014_sample_code/exampleappusingphotosframework.zip

仔细挖掘下然后就能解决啦~

iOS 8.0+ 使用Photos framework 创建相册代码

#import <Photos/Photos.h
复制代码
[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{  [PHAssetCollectionChangeRequest creationRequestForAssetCollectionWithTitle:@"Rd"];} completionHandler:^(BOOL success, NSError *error) {  if (!success) {    NSLog(@"Error creating album: %@", error);  }}];
复制代码

0 0