大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处.

如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;)


在iOS9的SDK中我们会发现原来地址簿权限查询,获取以及创建之类的方法都被标记为废弃:

虽然仍然可以使用,但是谁也不愿意看到一大堆警告在眼前闪来闪去的的.

下面给出替换方法.

原来的API大家可以注意到都是以C函数给出的,Apple可能觉得这不怎么漂亮,所以他们重新设计了一个CNContactStore类来使其符合Objc类似的赶脚…你可以认为该类对应着iOS设备上地址簿实际存储的数据库.

那么原来的旧的的C方法如何转换为新的一系列方法呢?查看Apple官方的文档(如上图所示),只是简单标记这些方法为已废弃,但并没有给出替换方案,所以这里本猫抛砖引玉,来看看原来访问地址簿权限和申请权限的代码如何修改为新的方法.

首先我们给出原来方法的代码:

switch (ABAddressBookGetAuthorizationStatus()){ case kABAuthorizationStatusAuthorized:{
addressBook = ABAddressBookCreateWithOptions(NULL, &error); /* Do your work and once you are finished ... */
if (addressBook != NULL){
                    CFRelease(addressBook);
                }
break; }
case kABAuthorizationStatusDenied:{ [self displayMessage:kDenied]; break;
}
case kABAuthorizationStatusNotDetermined:{
addressBook = ABAddressBookCreateWithOptions(NULL, &error); ABAddressBookRequestAccessWithCompletion
(addressBook, ^(bool granted, CFErrorRef error) {
if (granted){
NSLog(@"Access was granted");
}else{
NSLog(@"Access was not granted");
}
if (addressBook != NULL){
                        CFRelease(addressBook);
                    }
});
break; }
case kABAuthorizationStatusRestricted:{ [self displayMessage:kRestricted]; break;
} }

然后是新方法的代码:

_contactStore = [CNContactStore new];
    // Override point for customization after application launch.
    switch ([CNContactStore authorizationStatusForEntityType:CNEntityTypeContacts]){
        case CNAuthorizationStatusAuthorized:
            NSLog(@"允许访问地址簿!");
            break;
        case CNAuthorizationStatusDenied:
        case CNAuthorizationStatusNotDetermined:
            [_contactStore requestAccessForEntityType:CNEntityTypeContacts completionHandler:^(BOOL granted,NSError *error){
                if (granted) {
                    NSLog(@"你已允许访问地址薄!");
                }else{
                    NSLog(@"你不允许访问地址簿!");
                }
            }];
            break;
        default:
            NSLog(@"其他情况!");
    }

通过以上代码,可以看到新的逻辑变得更清晰了,更重要的是再也不用写C和Objc联姻的”四不像”代码了,虽然某些时候两者的联姻还是有些搞头的… ;)

关于地址簿新旧方法的进一步的内容,大家可以到以下blog观赏:

http://www.appcoda.com/ios-contacts-framework/

iOS9中关于地址簿ABAddressBookXXX之类方法被废弃的解决的更多相关文章

  1. 【转】Android中引入第三方Jar包的方法(java.lang.NoClassDefFoundError解决办法)

    原文网址:http://www.blogjava.net/anchor110/articles/355699.html 1.在工程下新建lib文件夹,将需要的第三方包拷贝进来.2.将引用的第三方包,添 ...

  2. C#中IP地址转换为数值的方法

    任何语言都通用的方法转换 IP 地址 a.b.c.d ==> a***+b**+c*+d ===> *(c+*(b+*a)) +d 示例: ***+**+*+ ===> *( +*( ...

  3. C#.net中当地址有中文时,图片无法显示解决方法

    原文发布时间为:2008-11-05 -- 来源于本人的百度文章 [由搬家工具导入] 搞了半天都无法正常显示图片, string path = Server.MapPath("." ...

  4. 用 eric6 与 PyQt5 实现python的极速GUI编程(系列04)---- PyQt5自带教程:地址簿(address book)

    [引子] 在PyQt5自带教程中,地址簿(address book)程序没有完全实现界面与业务逻辑分离. 本文我打算用eric6+PyQt5对其进行改写,以实现界面与逻辑完全分离. [概览] 1.界面 ...

  5. Derek解读Bytom源码-P2P网络 地址簿

    作者:Derek 简介 Github地址:https://github.com/Bytom/bytom Gitee地址:https://gitee.com/BytomBlockchain/bytom ...

  6. foxmail地址簿导入thunderbird的乱码问题 (转载)

    转自:http://blog.csdn.net/gexueyuan/article/details/9032595 由于foxmail的地址簿格式和thunderbird的格式不一样,另外也存在编码问 ...

  7. 总结iOS9中的新的方法

    iOS平台在快速的发展,各种接口正在不断的更新.随着iOS9的发布,又有一批老方法不推荐使用了,你若调用这些方法,运行的结果是没有问题的,但是会出现警告“***is deprecated :first ...

  8. 【转载】取得系统中网卡MAC地址的三种方法

    From:http://blog.csdn.net/zhangting1987/article/details/2732135 网卡地址这个概念有点混淆不清.因为实际上有两个地址,mac地址和物理地址 ...

  9. iOS9 中关闭ATS的方法

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) iOS9中增加了系统的安全性,你会发现默认情况下打开非http ...

随机推荐

  1. [SCOI 2011]糖果

    Description 题库链接 给出 \(N\) 个节点,节点有正点权, \(K\) 个三元组 \((X,A,B)\) 来描述节点点权之间的关系. 如果 \(X=1\) , 表示 \(A\) 的点权 ...

  2. 空间漫游(SAC大佬的测试)

    题目描述由于球哥和巨佬嘉诚交了很多保护费,我们有钱进行一次 d 维空间漫游.d 维空间中有 d 个正交坐标轴,可以用这些坐标轴来描述你在空间中的位置和移动的方向.例如,d = 1 时,空间是一个数轴, ...

  3. Codeforces Round #402 (Div. 1)

    A题卡壳了,往离线倒着加那方面想了会儿,后来才发现方向错了,二十多分钟才过掉,过了B后做D,想法好像有点问题,最后只过两题,掉分了,差一点回紫. AC:AB Rank:173 Rating:2227- ...

  4. ●BZOJ 4559 [JLoi2016]成绩比较

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=4559 题解: 计数dp,拉格朗日插值法.真的是神题啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊 ...

  5. Xtrabackup2.4.8备份、还原、恢复Mysql5.7.19实操

    环境:CentOS 6.7  + Mysql 5.7.19 + Xtraback 2.4.8 innobackupex常用参数: --user=USER 指定备份用户,不指定的话为当前系统用户 --p ...

  6. python 2week

    本节内容 列表.元组操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码 列表是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储.修改等操作 定义列表 1 names =  ...

  7. C语言程序设计第二次作业1

    (一)改错题 1.输出带框文字:在屏幕上输出以下3行信息. ************* Welcome ************* 源程序 include int mian() { printf(&q ...

  8. EF 6.x、EF Core实现dynamic动态查询和EF Core实现多个上下文实例池你了解多少?

    前言 很长一段时间没有写博客了,今天补上一篇吧,偶尔发现不太愿意写博客了,太耗费时间,不过还是在坚持当中,毕竟或许写出来的东西能帮到一些童鞋吧,接下来我们直奔主题.无论是在在EF 6.x还是EF Co ...

  9. JAVA的Date类与Calendar类(常用方法)

    http://blog.csdn.net/xiaopihai86/article/details/50827945 1.用Java.util.Calender来实现      Calendar cal ...

  10. swift 初始化

    知识点总结: 1.结构体 1.1.默认初始化方法:1.空初始化方法:2.成员初始化方法 struct Person{ var name = "tom" var age = } le ...