说到ALAssetsLibrary,相信搞iOS开发的大都知道它,在iOS上做过相册相关功能的应该对这个都比较熟悉了,用它来操作访问相册是很方便的。但是,,,,自从iOS8发布后,ALAssetsLibrary在Stack Overflow上被各种讨论了。因为在iOS8上用这个库创建相册会有个bug:创建相册,手动删除它,再用这个库去创建刚被删除的相册,这个时候方法回调是不会跑fail模块的,它走的是正常流程,但是带回来的group却是nil。

- (void)addAssetsGroupAlbumWithName:(NSString *)name resultBlock:(ALAssetsLibraryGroupResultBlock)resultBlock failureBlock:(ALAssetsLibraryAccessFailureBlock)failureBlock 

于是网上各种搜,也看到 Stack Overflow各种各样的解决方法,反正我是没找到有效的解决办法。无意中在文档中看到了这个:

于是就顺着文档找下去,最后得出有效解决方法,废话不多说,直接贴代码了(到了下班点了)。

-(void)saveImageToXYAlbum:(UIImage*)image completion:(SaveImageCompletion)completion
{if(image){__weak ALAssetsLibrary *weakAssetsLibrary = assetsLibrary;__weak XYWallPaperHelper *weakSelf = self;dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{if(TT_IS_IOS8_AND_UP){PHPhotoLibrary* photoLibrary = [PHPhotoLibrary sharedPhotoLibrary];[photoLibrary performChanges:^{PHFetchResult* fetchCollectionResult;PHAssetCollectionChangeRequest* collectionRequest;NSString *albumIdentifier = [weakSelf xyWallPaperAlbumIdentifier];if(albumIdentifier){fetchCollectionResult = [PHAssetCollection fetchAssetCollectionsWithLocalIdentifiers:@[albumIdentifier] options:nil];PHAssetCollection* exisitingCollection = fetchCollectionResult.firstObject;collectionRequest = [PHAssetCollectionChangeRequest changeRequestForAssetCollection:exisitingCollection];}else{fetchCollectionResult = [PHAssetCollection fetchAssetCollectionsWithLocalIdentifiers:@[XYWallPaperAlbum] options:nil];// Create a new albumif ( !fetchCollectionResult || fetchCollectionResult.count==0 ){collectionRequest = [PHAssetCollectionChangeRequest creationRequestForAssetCollectionWithTitle:XYWallPaperAlbum];[weakSelf saveXYWallPaperAblumIdentifier:collectionRequest.placeholderForCreatedAssetCollection.localIdentifier];}}PHAssetChangeRequest* createAssetRequest = [PHAssetChangeRequest creationRequestForAssetFromImage:image];[collectionRequest addAssets:@[createAssetRequest.placeholderForCreatedAsset]];} completionHandler:^(BOOL success, NSError *error){completion(error);}];}else{[weakAssetsLibrary saveImage:image toAlbum:XYWallPaperAlbum withCompletionBlock:completion];}});}
}

这里有个地方需要注意,创建相册后要存储一下localIdentifier,因为下次再获取AssetCollection的时候需要用到它。如果每次都用相册名去试图获取到之前创建的同名AssetCollection,不会得到结果的。就这里需要注意一下,其他倒没什么,代码也比较简单。  上面代码部分针对iOS8以下版本的代码逻辑,这里就不赘述了,网上一大把。

解决iOS8下ALAssetsLibrary创建相册的bug相关推荐

  1. 解决windows下无法创建以“.”开头的文件夹或者文件

    一.问题描述 在windows下创建以"."为开头的文件夹和文件,会出现下面问题: 二.问题解决 1.创建文件夹 比如创建.kaggle文件夹,这样显然是会失败的,所以你可以先随便 ...

  2. 解决vs2010下不能创建项目及文件的问题

    公司最近买了批固态硬盘,将win7系统装到固态硬盘上后,然后依次装上vs2010,及其它开发软件,但令人奇怪的是在创建项目时,提示说:"不允许所请求的注册表访问权",令人费解,在国 ...

  3. 解决ios8下coreData没有NSPersistentContainer的问题

    用Xcode8.1默认创建ios app的时候,使用coreData的话,要10.0以上的版本才行.因为NSPersistentContainer只有10.0以上的版本才有,10.0以下的版本是没有的 ...

  4. [转]解决IE下CSS背景图片闪烁的Bug

    [转]解决IE下CSS背景图片闪烁的Bug <P>        很多时候我们要给一些按钮或是img设置背景,而为了达到数据与表现样式分离的效果,通常背景样式都是在CSS里设定的,但是这个 ...

  5. 解决windows10环境下conda创建环境出现 No writeable pkgs directories configured

    文章目录 解决windows10环境下conda创建环境出现 No writeable pkgs directories configured 如果这样都不行,就一步一步的接着往下做 查看自己cond ...

  6. Vim插件ale在windows下的安装配置与BUG解决

    ​​​​​​ 文章目录 ALE介绍 ALE安装 ALE配置 自定义侧边提示符号 自定义底部提示消息 高亮显示设置 状态栏提示集成 linter相关设置 快捷键设置 ALE的bug处理 Bug描述 Bu ...

  7. python进程池win出错_解决windows下python3使用multiprocessing.Pool出现的问题

    例如: from multiprocessing import Pool def f(x): return x*x pool = Pool(processes=4) r=pool.map(f, ran ...

  8. Htaccess文件是什么以及Windows下自由创建.htaccess文件的N种方法

    .htaccess是什么 概述来说,htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置. 通过htaccess文件,可以帮我们实现:网页301重定向.自定义404错误 ...

  9. Serverless 场景下 Pod 创建效率优化

    作者 | 张翼飞  阿里云技术专家 来源|阿里巴巴云原生公众号 导读:众所周知,Kubernetes 是云原生领域的基石,作为容器编排的基础设施,被广泛应用在 Serverless 领域.弹性能力是 ...

  10. 解决Linux下MySQL启动错误Starting MySQL.Manager of pid-file quit without updating file.[FAILED]...

    刚装完MySQL,启动时报如下错误: Starting MySQL.Manager of pid-file quit without updating file.[FAILED] 解决Linux下My ...

最新文章

  1. python库——h5py入门讲解
  2. Android应用实现文件关联
  3. node aws 内存溢出_在AWS Elastic Beanstalk上运行生产Node应用程序的现实
  4. Python3 解释器
  5. 安装go client调用Kubernetes API
  6. input输入身份证验证
  7. C语言面试题大汇总之华为面试题
  8. Javascript汉字转拼音,中文转拼音
  9. 5G手机网优测试软件,5G测速WiFi测量仪
  10. DAX——FILTER
  11. python爬虫能爬取微信密码吗_爬虫如何爬取微信公众号文章
  12. VayoPro-SMT Expert|一分钟搞定拼板
  13. 基于DNN的鼻咽癌鼻咽淋巴瘤数据处理
  14. 【基因】原核生物基因调控机制,操纵子学说整理——2015年7月17日
  15. Java学习路线-夯实基础
  16. WordPress备案链接工信部官网
  17. 汇编语言---算术运算指令
  18. Osgearth设置平面投影显示
  19. informatica 基本组件使用说明
  20. udk2017环境搭建编译步骤

热门文章

  1. matlab中双引号_在matlab中单引号和双引号各有什么意义?为什么有的函数参数要加单引号,有的要加双引号?...
  2. 未来-区块链-Micron:区块链永远不会忘记:内存对这项革命性技术的推动作用...
  3. 2018年下半年信息系统项目管理师考试真题附答案解析(5)
  4. 雅虎邮箱为什么停止服务_雅虎的发展项目将变成什么样?
  5. ZYNQ PL 添加IP 串口UART AXI UART16550
  6. 用于实时视频和图像去雾的优化对比度增强算法
  7. 关于c++16进制字符串与ASCII字符串的相互转换
  8. UFS Host Controller工作流程
  9. 元旦贺卡html,元旦贺卡祝福语
  10. 校运会计算机应用口号,校运会入场霸气押韵口号(精选60句)