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。
- - (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 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 灯,也就是说第二个 ...
最新文章
- 分布式锁的三种实现方式_基于 redis 的分布式锁实现
- 训练Rainbow算法需要1425个GPU Day?谷歌说强化学习可以降低计算成本
- inputstream的大小为0_李太阳2020302期排列三推荐:本期两码看好0、3
- ​esquisse: 快速可视化图形的 Rstudio 插件
- django设置models.Model数据可以为空
- Spring Boot学习总结(7)——SpringBoot之于Spring优势
- 如何同时配置GitHub和gitlab的SSH
- tensorflow输出
- 页面中超长字段只显示部分
- 算法 博士_Strangecode博士-我如何学会不再担心并喜欢算法
- 9008刷机工具_黔隆科技刷机教程OPPOR11忘记密码免刷机保资料解屏幕锁教程
- Excel常用10个函数
- OSChina 周四乱弹 ——你想用小鱼干拐走本公主么
- 中国移动手机阅读基地社会招聘笔试面试全过程
- 魔兽名字显示服务器,魔兽世界怀旧服服务器名称
- 面对勒索软件,除了交赎金,还能怎么办?——我们有11个建议给你
- MICCAI 2021 FLARE 挑战:快速和低 GPU 内存腹部器官分割-附代码
- android 开发蓝牙电子秤,GitHub - xiangbohua/scales-bridge: scales-bridge 电子称 蓝牙电子秤 连接库...
- 数据科学与计算机学院凌云,陶钧(中山大学数据科学与计算机学院副教授)_百度百科...
- direct3D 学习笔记
热门文章
- 阿斯利康英飞凡在华获批用于治疗广泛期小细胞肺癌;​君实生物与嘉晨西海成立合资公司 | 医药健闻...
- 声音甜美的美女工程师已就位-帮你搞定React面试的疑难杂症 React面试优化教程
- 哪类公司能开增值税票,哪类公司只能开普票?
- 区块链分片:《Monoxide: Scale Out Blockchain with Asynchronous Consensus Zones》论文翻译个人笔记
- Python 一键获取市县级城市经纬度信息
- 【Java 9】【排序算法】【微信开发】【反钓鱼】【Spring】| Chat · 预告
- 小程序使用createInnerAudioContext实现音乐播放
- 三星Galaxy I9100完整刷机教程
- Quartus II 13.1破解后无法仿真波形的解决办法(MGLS、LM环境变量配置出错)
- 南昌大学航天杯第二届程序设计竞赛校赛网络同步赛B	取石子(博弈SG函数模板)