解决iOS8.0以上系统下无法通过代码创建被删除过的同名相册 ( iOS 8 Photos framework: Create a albums with iOS8 )

问题描述:

在苹果的 iOS8.0以上, 当你创建完一个相册, 例如名为"Rd", 然后在相册中手动删除了这个"Rd"相册, 再次通过代码

#import <AssetsLibrary/ALAssetsLibrary.h>
 ALAssetsLibrary *assetsLibrary = [[ALAssetsLibrary alloc] init];
[assetsLibrary addAssetsGroupAlbumWithName:@"Rd" resultBlock:^(ALAssetsGroup *group)
{
  [groups addObject:group];
}failureBlock:nil];

以上代码在 iOS 8.0+ 从未创建过 "Rd" 这个相册的 iPhone 或者 iPad 上面可以成功创建相册"Rd" ;

在 iOS 8.0 以下是无论什么情况下都可以创建;

但是在iOS 8.0+ 上如果是已经创建过 "Rd" 这个相册, 然后 "Rd" 相册 被手动删除后的 iPhone 或者 iPad 上面, 代码执行后 group 是 nil ;

问题分析:

个人感觉是跟 iOS 8.0 之后, 相册新增了 Recently Deleted (最近删除) 这个功能, 导致我们在相册里边手动删除 "Rd"相册 是并没有完全删除, 导致创建相册虽然成功, 但却为 nil ,因为创建的相册还是处于 Recently Deleted 的状态;

解决方案:

既然发现无法创建后, 查阅官方文档, 发现这么一段话

(在 iOS 8.0 后, 使用the Photos framework 代替 the Assets Library framework , The Photos framework 提供更特色和更好的表现 在使用 photo library 工作的时候)

苹果官方Photo Framework例子:

https://developer.apple.com/devcenter/download.action?path=/wwdc_2014/wwdc_2014_sample_code/exampleappusingphotosframework.zip

仔细挖掘下然后就能解决啦~

iOS 8.0+ 使用Photos framework 创建相册代码

#import <Photos/Photos.h
[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^
{
  [PHAssetCollectionChangeRequest creationRequestForAssetCollectionWithTitle:@"Rd"];
} completionHandler:^(BOOL success, NSError *error)
{
  if (!success) {
    NSLog(@"Error creating album: %@", error);
  }
}];
时间: 2024-10-14 00:50:42

解决iOS8.0以上系统下无法通过代码创建被删除过的同名相册 ( iOS 8 Photos framework: Create a albums with iOS8 )的相关文章

Ubuntu14.0.4系统下 SVN的安装与配置

Ubuntu14.0.4系统下  SVN的安装与配置 SVN(subversion)是近年来崛起的版本管理工具,绝大多数开源软件都使用了svn作为代码版本管理软件.对于写代码的用户来说使用版本控制管理工具svn来说最合适 不过了,下面就介绍一下在Ubuntu 14.0.4下安装和配置SVN的简要方法! 本文是小编亲自整理.测试.验证过的方法,也可以算是最全.最简易的SVN安装配置方法! 下面文档分为四个部分: 1.在Ubuntu 14.0.4系统中安装SVN 2.配置SVN 3.启动和关闭svn

Linux系统中如何一次创建和删除多个文件/文件夹

Linux系统中如何一次创建和删除多个文件/文件夹 1.创建/删除多个文件 //连续创建5个文件,文件名为file1.file2...file5 [[email protected] ~]# touch file{1..5} [[email protected] ~]# ls anaconda-ks.cfg Downloads file3 hello install.log Pictures test Desktop file1 file4 hello.c install.log.syslog

Windows系统下,maven redeploy过程无法删除旧项目的目录

Windows系统下,redeploy过程无法删除旧项目的目录 报错信息在$TOMCAT_HOME/logs下的catalina日志文件中,如下: 信息: Undeploying context [/web-loab] 十月 11, 2014 3:52:26 下午 org.apache.catalina.startup.ExpandWar deleteDir 严重: [D:\tomcat\apache-tomcat-7.0.56\webapps\web-loab\WEB-INF] could n

Android6.0状态栏(系统下拉状态栏的定制)

■目标 不允许用户从上到下下拉状态栏 ■案1 截获手势,不处理该手势. SystemGesturesPointerEventListener public void onPointerEvent(MotionEvent event) { if (swipe == SWIPE_FROM_TOP) { 不调用手势处理} ■案1效果 无效果. adb log发现代码确实走到了,说明这里只是一个通知机制. ■案2 在状态栏上进行中断手势或者touch命令 StatusBarWindowView的onIn

Liunx系统下进行LVM的创建以及相关磁盘配额——实战篇

本次博客将会详细讲解有关Liunx操作系统中LVM逻辑卷的基本概述以及有针对性的进行实验操作,并且同样会讲解磁盘配额的相关知识.希望各位朋友不要错过! 目录: LVM逻辑卷概述及相关命令 LVM实际应用实例操作 磁盘配额概述 磁盘配额相关管理实操 一.LVM逻辑卷概述及相关命令 LVM是 Logical Volume Manager(逻辑卷管理)的简写,它是Linux环境下对磁盘分区进行管理的一种机制,普通的磁盘分区管理方式在逻辑分区划分好之后就无法改变其大小,当一个逻辑分区存放不下某个文件时,

Linux系统下为任何应用创建启动图标

很多时候,我们的软件是通过github项目或者解压zip tar包等获取的,系统是搜不到这个应用的,设置没有启动图标,每次都需要启动安装目录的运行文件./XXXtest非常不方便,但我们是可以自行创建一个桌面启动器的,并能够在系统应用搜索中被发现的.第一步:使用文本编译器创建XXXtest.desktop文件:nano XXXtest.desktop 第二步:编辑XXXtest.desktop文件,上面的命令会打开该文件,如果没有则会创建一个空文件,添加如下信息. [Desktop Entry]

Linux系统编写shell脚本批量创建和删除用户

一.编写shell脚本批量添加用户 实现方法:判断用户是否存在,存在则返回错误提示,同时判断用户文件是否存在,不存在则退出 1.创建添加用户脚本 [[email protected] ~]# vim useradd.sh #!/bin/bashif [ $# -eq 0 ];then        echo "你没有输入任何文件!"        exit 1fi if [ ! -f $1 ];then        echo "输入有误!"        exit

[ActionScript 3.0] AS3 对XML的操作,创建、删除、增加节点方法

package { import flash.display.Sprite; /** * @author:Frost.Yen * @E-mail:[email protected] * @create: 2016-3-11 上午11:31:11 * */ public class OperateXML extends Sprite { private var _xml:XML = <data> <item>item1</item> <item>item2&l

CentOS 6.9下KVM虚拟机快照创建、删除、恢复(转)

使用文件快照的方式实现文件备份,但单说快照(snapshot)的话,他是某一时间点(版本)你能看到的该时间点备份文件状态的全貌,通过文件的快照(全貌)你能恢复到特定时间点(版本)的文件状态. 创建虚拟机centos6的快照 virsh snapshot-create centos6 查看格式 qemu-img info /data/kvm/centos6.img 编辑centos6虚拟机的配置 比如转换格式 virsh edit centos6 创建快照要先转换为qcow2 格式 qemu-im