http://blog.csdn.net/jerrychenly/article/details/44858355

解决iOS8下ALAssetsLibrary创建相册的bug

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

[objc]  view plain copy
  1. - (void)addAssetsGroupAlbumWithName:(NSString *)name resultBlock:(ALAssetsLibraryGroupResultBlock)resultBlock failureBlock:(ALAssetsLibraryAccessFailureBlock)failureBlock

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

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

[objc]  view plain copy
  1. -(void)saveImageToXYAlbum:(UIImage*)image completion:(SaveImageCompletion)completion
  2. {
  3. if(image){
  4. __weak ALAssetsLibrary *weakAssetsLibrary = assetsLibrary;
  5. __weak XYWallPaperHelper *weakSelf = self;
  6. dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
  7. if(TT_IS_IOS8_AND_UP){
  8. PHPhotoLibrary* photoLibrary = [PHPhotoLibrary sharedPhotoLibrary];
  9. [photoLibrary performChanges:^{
  10. PHFetchResult* fetchCollectionResult;
  11. PHAssetCollectionChangeRequest* collectionRequest;
  12. NSString *albumIdentifier = [weakSelf xyWallPaperAlbumIdentifier];
  13. if(albumIdentifier){
  14. fetchCollectionResult = [PHAssetCollection fetchAssetCollectionsWithLocalIdentifiers:@[albumIdentifier] options:nil];
  15. PHAssetCollection* exisitingCollection = fetchCollectionResult.firstObject;
  16. collectionRequest = [PHAssetCollectionChangeRequest changeRequestForAssetCollection:exisitingCollection];
  17. }else{
  18. fetchCollectionResult = [PHAssetCollection fetchAssetCollectionsWithLocalIdentifiers:@[XYWallPaperAlbum] options:nil];
  19. // Create a new album
  20. if ( !fetchCollectionResult || fetchCollectionResult.count==0 ){
  21. collectionRequest = [PHAssetCollectionChangeRequest creationRequestForAssetCollectionWithTitle:XYWallPaperAlbum];
  22. [weakSelf saveXYWallPaperAblumIdentifier:collectionRequest.placeholderForCreatedAssetCollection.localIdentifier];
  23. }
  24. }
  25. PHAssetChangeRequest* createAssetRequest = [PHAssetChangeRequest creationRequestForAssetFromImage:image];
  26. [collectionRequest addAssets:@[createAssetRequest.placeholderForCreatedAsset]];
  27. } completionHandler:^(BOOL success, NSError *error){
  28. completion(error);
  29. }];
  30. }else{
  31. [weakAssetsLibrary saveImage:image toAlbum:XYWallPaperAlbum withCompletionBlock:completion];
  32. }
  33. });
  34. }
  35. }

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

iOS8开发之 PHAsset 保存图片到相册(相机胶卷) 详解三相关推荐

  1. iOS8开发之 PHAsset 保存图片到相册(相机胶卷) 详解一

    http://segmentfault.com/a/1190000003950935 平时开发APP时难免会遇到保存图片到相册的相关操作,具体我么可以直接保存到系统的相机胶卷, 也可以自定义相册保存图 ...

  2. ios 保存图片到相册 崩溃_iOS开发之 保存图片到相册(相机胶卷)

    平时开发APP时难免会遇到保存图片到相册的相关操作,具体我么可以直接保存到系统的相机胶卷, 也可以自定义相册保存图片,下面我们就一起来看一看. 保存图片到系统相册 先看看比较简单的直接保存图片到系统相 ...

  3. (013)java后台开发之Mac系统安装和配置tomcat步骤详解

    一:下载 打开Apache Tomcat官网,选择需要的版本下载: 二:存放到本地 文件夹重名民为ApacheTomcat,放到/Users/计算机名/Library/目录下 三:启动Tomcat 打 ...

  4. wxpython使用方法_python图形界面开发之wxPython树控件使用方法详解

    wxPython树控件介绍 树(tree)是一种通过层次结构展示信息的控件,如下图所示是树控件示例,左窗口中是树控件,在wxPython中树控件类是wx.TreeCtrl. wx.TreeCtrl常用 ...

  5. java list 元素去重_小猿圈Java开发之list按照元素某个字段去重详解

    小猿圈Java老师给大家分享一篇关于如何实现Java8中list按照元素的某个字段去重的详细介绍,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,下面我们一起来看一下吧. ...

  6. Android开发之AudioManager(音频管理器)详解

    AudioManager简介: AudioManager类提供了访问音量和振铃器mode控制.使用Context.getSystemService(Context.AUDIO_SERVICE)来得到这 ...

  7. Android开发之GPS测试完整案例源码详解之实时检测GPS的状态

    获取Android系统Location位置服务实例: /*** Get location manager system service** @return LocationManager*/publi ...

  8. java开发之ServLet注解、自定义容器方式详解

    目录 一.为什么使用注解方式和自定义容器方式 二.注解方式步骤 1.创建javaEE8版本的web项目 2.创建一个类MyServlet继承HTTPServlet类并重写doGet()和doPost( ...

  9. 【IoT】STM32 系统级开发之 ucosIII 或 freeRTOS 事件标志组详解

    1.轻型操作系统同步的方案详解 1)信号量 假设有两个任务 Task1 和 Task2,第一个任务进行按键的扫描,第二个任务进行LED灯的点亮 需求: 扫描到按键按下后点亮 LED 灯,也就是说第二个 ...

最新文章

  1. 分布式锁的三种实现方式_基于 redis 的分布式锁实现
  2. 训练Rainbow算法需要1425个GPU Day?谷歌说强化学习可以降低计算成本
  3. inputstream的大小为0_李太阳2020302期排列三推荐:本期两码看好0、3
  4. ​esquisse: 快速可视化图形的 Rstudio 插件
  5. django设置models.Model数据可以为空
  6. Spring Boot学习总结(7)——SpringBoot之于Spring优势
  7. 如何同时配置GitHub和gitlab的SSH
  8. tensorflow输出
  9. 页面中超长字段只显示部分
  10. 算法 博士_Strangecode博士-我如何学会不再担心并喜欢算法
  11. 9008刷机工具_黔隆科技刷机教程OPPOR11忘记密码免刷机保资料解屏幕锁教程
  12. Excel常用10个函数
  13. OSChina 周四乱弹 ——你想用小鱼干拐走本公主么
  14. 中国移动手机阅读基地社会招聘笔试面试全过程
  15. 魔兽名字显示服务器,魔兽世界怀旧服服务器名称
  16. 面对勒索软件,除了交赎金,还能怎么办?——我们有11个建议给你
  17. MICCAI 2021 FLARE 挑战:快速和低 GPU 内存腹部器官分割-附代码
  18. android 开发蓝牙电子秤,GitHub - xiangbohua/scales-bridge: scales-bridge 电子称 蓝牙电子秤 连接库...
  19. 数据科学与计算机学院凌云,陶钧(中山大学数据科学与计算机学院副教授)_百度百科...
  20. direct3D 学习笔记

热门文章

  1. 阿斯利康英飞凡在华获批用于治疗广泛期小细胞肺癌;​君实生物与嘉晨西海成立合资公司 | 医药健闻...
  2. 声音甜美的美女工程师已就位-帮你搞定React面试的疑难杂症 React面试优化教程
  3. 哪类公司能开增值税票,哪类公司只能开普票?
  4. 区块链分片:《Monoxide: Scale Out Blockchain with Asynchronous Consensus Zones》论文翻译个人笔记
  5. Python 一键获取市县级城市经纬度信息
  6. 【Java 9】【排序算法】【微信开发】【反钓鱼】【Spring】| Chat · 预告
  7. 小程序使用createInnerAudioContext实现音乐播放
  8. 三星Galaxy I9100完整刷机教程
  9. Quartus II 13.1破解后无法仿真波形的解决办法(MGLS、LM环境变量配置出错)
  10. 南昌大学航天杯第二届程序设计竞赛校赛网络同步赛B 取石子(博弈SG函数模板)