iOS9中关于地址簿ABAddressBookXXX之类方法被废弃的解决
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处.
如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! 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观赏:
iOS9中关于地址簿ABAddressBookXXX之类方法被废弃的解决的更多相关文章
- 【转】Android中引入第三方Jar包的方法(java.lang.NoClassDefFoundError解决办法)
原文网址:http://www.blogjava.net/anchor110/articles/355699.html 1.在工程下新建lib文件夹,将需要的第三方包拷贝进来.2.将引用的第三方包,添 ...
- C#中IP地址转换为数值的方法
任何语言都通用的方法转换 IP 地址 a.b.c.d ==> a***+b**+c*+d ===> *(c+*(b+*a)) +d 示例: ***+**+*+ ===> *( +*( ...
- C#.net中当地址有中文时,图片无法显示解决方法
原文发布时间为:2008-11-05 -- 来源于本人的百度文章 [由搬家工具导入] 搞了半天都无法正常显示图片, string path = Server.MapPath("." ...
- 用 eric6 与 PyQt5 实现python的极速GUI编程(系列04)---- PyQt5自带教程:地址簿(address book)
[引子] 在PyQt5自带教程中,地址簿(address book)程序没有完全实现界面与业务逻辑分离. 本文我打算用eric6+PyQt5对其进行改写,以实现界面与逻辑完全分离. [概览] 1.界面 ...
- Derek解读Bytom源码-P2P网络 地址簿
作者:Derek 简介 Github地址:https://github.com/Bytom/bytom Gitee地址:https://gitee.com/BytomBlockchain/bytom ...
- foxmail地址簿导入thunderbird的乱码问题 (转载)
转自:http://blog.csdn.net/gexueyuan/article/details/9032595 由于foxmail的地址簿格式和thunderbird的格式不一样,另外也存在编码问 ...
- 总结iOS9中的新的方法
iOS平台在快速的发展,各种接口正在不断的更新.随着iOS9的发布,又有一批老方法不推荐使用了,你若调用这些方法,运行的结果是没有问题的,但是会出现警告“***is deprecated :first ...
- 【转载】取得系统中网卡MAC地址的三种方法
From:http://blog.csdn.net/zhangting1987/article/details/2732135 网卡地址这个概念有点混淆不清.因为实际上有两个地址,mac地址和物理地址 ...
- iOS9 中关闭ATS的方法
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) iOS9中增加了系统的安全性,你会发现默认情况下打开非http ...
随机推荐
- [SHOI2008]堵塞的交通
Description 有一天,由于某种穿越现象作用,你来到了传说中的小人国.小人国的布局非常奇特,整个国家的交通系统可 以被看成是一个2行C列的矩形网格,网格上的每个点代表一个城市,相邻的城市之间有 ...
- [HAOI2011]向量
题目描述 给你一对数a,b,你可以任意使用(a,b), (a,-b), (-a,b), (-a,-b), (b,a), (b,-a), (-b,a), (-b,-a)这些向量,问你能不能拼出另一个向量 ...
- bzoj 2734: [HNOI2012]集合选数
题目描述 <集合论与图论>这门课程有一道作业题,要求同学们求出{1, 2, 3, 4, 5}的所有满足以 下条件的子集:若 x 在该子集中,则 2x 和 3x 不能在该子集中. 同学们不喜 ...
- bzoj1858[Scoi2010]序列操作 线段树
1858: [Scoi2010]序列操作 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 3079 Solved: 1475[Submit][Statu ...
- IP地址、子网掩码、网关、DNS服务器
1. IP地址 IP是英文Internet Protocol的缩写,意思是"网络之间互连的协议",也就是为计算机网络相互连接进行通信而设计的协议.在因特网中,它是能使连接到网上的所 ...
- 16. 3Sum Closest(中等)
Given an array S of n integers, find three integers in S such that the sum is closest to a given num ...
- C# ref与out
ref参数是引用,out参数为输出参数.我写一个控制台的程序来说明一下两者的特点和区别: class Program { 3 public static void RefMethod( ref int ...
- HTML5 唤起 APP
<p><a href="xxx://app/question/95">点击跳转,直接回帖报名</a></p> /* global n ...
- OLE:对象的类没有在注册数据库中注册
我在网上下载了破解版的SAS9.3,用了一段时间之后,今天打开就填出一个提示框:OLE:对象的类没有在注册数据库中注册 激活该对象所需的应用程序不可用.是否用"转换--"将其转换为 ...
- Node.js Domain 模块
Node.js Domain(域) 简化异步代码的异常处理,可以捕捉处理try catch无法捕捉的异常.引入 Domain 模块 语法格式如下: var domain = require(" ...