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. GHOST还原教程详细
  2. csgo怎么控制电脑玩家_图文详解电脑怎么发起远程控制
  3. [luogu5004]专心OI - 跳房子【矩阵加速+动态规划】
  4. iOS-上架APP之启动页设置(新手必看!)
  5. 双优先编码器_掌握双原生 ISO,提升动态范围
  6. 云原生大数据架构中实时计算维表和结果表的选型实践
  7. java 跨类 调用 model_Model.java中的这两个方法,为什么不能在子类中调用,或者包内调用也行啊。...
  8. 文章采集伪原创工具_伪原创文章技巧(如何提高伪原创文章的原创度)
  9. html5制作线路图,HTML5画电路图
  10. matlab2c使用c++实现matlab函数系列教程-load函数
  11. github微信小程序服务器,GitHub - cp871202/nideshop: NideShop 开源微信小程序商城服务端(Node.js + ThinkJS)...
  12. WELCOME TO `ICE WORLD`
  13. vob文件如何转换成mp4
  14. SIM800C音频设计指南
  15. Numpy、Pandas、SciPy、Scikit-Learn、Matplotlib的关系以及学习资料
  16. 【图像处理】.jpg 和 .png
  17. 语音端点检测c语言,语音端点检测的方法.ppt
  18. 关于JackJson接收前端UTC格式化报错SON parse error: Cannot deserialize value of type `java.util.Date` from String
  19. 十进制与二进制之间转换详解
  20. 【Nginx学习01】--Nginx的安装

热门文章

  1. 月亮网摘(2007.9.11)
  2. Docker基础学习和使用方法
  3. 编程day01-装13问题(十进制->二进制)
  4. 老照片修复之Bringing Old Photos Back to Life
  5. VMware开机假死-VMware无法关机 虚拟机繁忙-vmware-vmx.exe进程无法结束(拒绝访问)-解决方法
  6. 用AI给裸女自动“穿”上比基尼,妈妈再也不担心我“辣眼睛”了
  7. win10 访问文件服务器,如何在Win10上使用SMBv1访问网络设备上的文件
  8. 2020年6月4日21点55分
  9. 5G风起,未来数据库有哪些关键词?
  10. 粘福卡多次扫,绝对真实!!!