iOS8开发之 PHAsset 保存图片到相册(相机胶卷) 详解三
http://blog.csdn.net/jerrychenly/article/details/44858355
解决iOS8下ALAssetsLibrary创建相册的bug
说到ALAssetsLibrary,相信搞iOS开发的大都知道它,在iOS上做过相册相关功能的应该对这个都比较熟悉了,用它来操作访问相册是很方便的。但是,,,,自从iOS8发布后,ALAssetsLibrary在Stack Overflow上被各种讨论了。因为在iOS8上用这个库创建相册会有个bug:创建相册,手动删除它,再用这个库去创建刚被删除的相册,这个时候方法回调是不会跑fail模块的,它走的是正常流程,但是带回来的group却是nil。
![](https://code.csdn.net/assets/CODE_ico.png)
- - (void)addAssetsGroupAlbumWithName:(NSString *)name resultBlock:(ALAssetsLibraryGroupResultBlock)resultBlock failureBlock:(ALAssetsLibraryAccessFailureBlock)failureBlock
于是网上各种搜,也看到 Stack Overflow各种各样的解决方法,反正我是没找到有效的解决办法。无意中在文档中看到了这个:
于是就顺着文档找下去,最后得出有效解决方法,废话不多说,直接贴代码了(到了下班点了)。
![](https://code.csdn.net/assets/CODE_ico.png)
- -(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 album
- if ( !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开发之 PHAsset 保存图片到相册(相机胶卷) 详解三相关推荐
- iOS8开发之 PHAsset 保存图片到相册(相机胶卷) 详解一
http://segmentfault.com/a/1190000003950935 平时开发APP时难免会遇到保存图片到相册的相关操作,具体我么可以直接保存到系统的相机胶卷, 也可以自定义相册保存图 ...
- ios 保存图片到相册 崩溃_iOS开发之 保存图片到相册(相机胶卷)
平时开发APP时难免会遇到保存图片到相册的相关操作,具体我么可以直接保存到系统的相机胶卷, 也可以自定义相册保存图片,下面我们就一起来看一看. 保存图片到系统相册 先看看比较简单的直接保存图片到系统相 ...
- (013)java后台开发之Mac系统安装和配置tomcat步骤详解
一:下载 打开Apache Tomcat官网,选择需要的版本下载: 二:存放到本地 文件夹重名民为ApacheTomcat,放到/Users/计算机名/Library/目录下 三:启动Tomcat 打 ...
- wxpython使用方法_python图形界面开发之wxPython树控件使用方法详解
wxPython树控件介绍 树(tree)是一种通过层次结构展示信息的控件,如下图所示是树控件示例,左窗口中是树控件,在wxPython中树控件类是wx.TreeCtrl. wx.TreeCtrl常用 ...
- java list 元素去重_小猿圈Java开发之list按照元素某个字段去重详解
小猿圈Java老师给大家分享一篇关于如何实现Java8中list按照元素的某个字段去重的详细介绍,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,下面我们一起来看一下吧. ...
- Android开发之AudioManager(音频管理器)详解
AudioManager简介: AudioManager类提供了访问音量和振铃器mode控制.使用Context.getSystemService(Context.AUDIO_SERVICE)来得到这 ...
- Android开发之GPS测试完整案例源码详解之实时检测GPS的状态
获取Android系统Location位置服务实例: /*** Get location manager system service** @return LocationManager*/publi ...
- java开发之ServLet注解、自定义容器方式详解
目录 一.为什么使用注解方式和自定义容器方式 二.注解方式步骤 1.创建javaEE8版本的web项目 2.创建一个类MyServlet继承HTTPServlet类并重写doGet()和doPost( ...
- 【IoT】STM32 系统级开发之 ucosIII 或 freeRTOS 事件标志组详解
1.轻型操作系统同步的方案详解 1)信号量 假设有两个任务 Task1 和 Task2,第一个任务进行按键的扫描,第二个任务进行LED灯的点亮 需求: 扫描到按键按下后点亮 LED 灯,也就是说第二个 ...
最新文章
- GHOST还原教程详细
- csgo怎么控制电脑玩家_图文详解电脑怎么发起远程控制
- [luogu5004]专心OI - 跳房子【矩阵加速+动态规划】
- iOS-上架APP之启动页设置(新手必看!)
- 双优先编码器_掌握双原生 ISO,提升动态范围
- 云原生大数据架构中实时计算维表和结果表的选型实践
- java 跨类 调用 model_Model.java中的这两个方法,为什么不能在子类中调用,或者包内调用也行啊。...
- 文章采集伪原创工具_伪原创文章技巧(如何提高伪原创文章的原创度)
- html5制作线路图,HTML5画电路图
- matlab2c使用c++实现matlab函数系列教程-load函数
- github微信小程序服务器,GitHub - cp871202/nideshop: NideShop 开源微信小程序商城服务端(Node.js + ThinkJS)...
- WELCOME TO `ICE WORLD`
- vob文件如何转换成mp4
- SIM800C音频设计指南
- Numpy、Pandas、SciPy、Scikit-Learn、Matplotlib的关系以及学习资料
- 【图像处理】.jpg 和 .png
- 语音端点检测c语言,语音端点检测的方法.ppt
- 关于JackJson接收前端UTC格式化报错SON parse error: Cannot deserialize value of type `java.util.Date` from String
- 十进制与二进制之间转换详解
- 【Nginx学习01】--Nginx的安装
热门文章
- 月亮网摘(2007.9.11)
- Docker基础学习和使用方法
- 编程day01-装13问题(十进制->二进制)
- 老照片修复之Bringing Old Photos Back to Life
- VMware开机假死-VMware无法关机 虚拟机繁忙-vmware-vmx.exe进程无法结束(拒绝访问)-解决方法
- 用AI给裸女自动“穿”上比基尼,妈妈再也不担心我“辣眼睛”了
- win10 访问文件服务器,如何在Win10上使用SMBv1访问网络设备上的文件
- 2020年6月4日21点55分
- 5G风起,未来数据库有哪些关键词?
- 粘福卡多次扫,绝对真实!!!