Contacts.framework iOS9新的类,用来替代AddressBook

苹果官方文档,用的是Swift https://developer.apple.com/library/ios/documentation/Contacts/Reference/Contacts_Framework/index.html#//apple_ref/doc/uid/TP40015328

这里记录一下自己的使用情况,仅作记录,还有很多不清楚的地方。

CNContactStore  我的理解是存储了所有联系人的一个类,有向用户发送授权请求的对象方法

requestAccessForEntityType:CNEntityTypeContacts completionHandler:^(BOOL granted, NSError * _Nullable error)

请求授权成功granted = 1,否则返回error。

获取所有联系人:

1. 对象store调用 enumerateContactsWithFetchRequest: request error:&error usingBlock:^(CNContact * _Nonnull contact, BOOL * _Nonnull stop) 可以获得所有联系人(这里有问题,详见下面),这里的request是 CNContactFetchRequest的对象,可以通过 initWithKeysToFetch 对象方法来创建,后面的数组是你所需要的key,可以在CNContact类的最下面找到。

2. block里返回的CNContact基本已经是我们所需要的联系人,里面的familyName,GivenName就不多说,关键是phoneNumbers这个属性,是一个数组,里面的元素是CNLabeledValue类型的对象,坑爹的来了,这个类有一个ValueType的属性,通过class方法才获知其实是CNPhoneNumber类型,通过stringValue可以获得我们需要的电话号码字符串。而CNLabeledValue的label属性就我目前用到的,可以联系人电话号码的类型(打印出来的字符串是诸如_$!<Mobile>!$_  _$!<Home>!$_  _$!<HomeFAX>!$_ 等格式,代表这个联系人存储的号码类型)

注意:我一开始把最下面的获得所有联系人的方法写在了授权方法里,结果出现了线程阻塞的问题,后来我把授权方法删掉(即不再授权,模拟器上测试的app删掉重新跑),也能读到联系人,不知道这里到底应该怎么做,希望有了解的大神指导。

[store requestAccessForEntityType:CNEntityTypeContacts completionHandler:^(BOOL granted, NSError * _Nullable error) {

NSLog(@"%d",granted);

}];

下面贴一下自己测试的代码,仅仅是获取联系人的姓名和电话

====================================下面是实际的代码=======================================

CNContactStore *store = [[CNContactStore alloc]init];

NSError *error = nil;

CNContactFetchRequest *request = [[CNContactFetchRequest alloc]initWithKeysToFetch:@[CNContactGivenNameKey,CNContactFamilyNameKey,CNContactPhoneNumbersKey]];

NSMutableArray *dataSource = [NSMutableArray array];

[store enumerateContactsWithFetchRequest:request error:&error usingBlock:^(CNContact * _Nonnull contact, BOOL * _Nonnull stop) {

NSString *name = [NSString stringWithFormat:@"%@ %@",contact.givenName,contact.familyName];//名字

NSString *phone = [NSString string];

for (CNLabeledValue *value in contact.phoneNumbers) {

if ([value.label isEqualToString:@"_$!<Mobile>!$_"]) {

CNPhoneNumber *phoneNum = value.value;

phone = phoneNum.stringValue; //电话

}

}

}];

添加,删除,修改联系人等等待补充。

交流QQ:758214335

时间: 2024-10-25 09:07:00

Contacts.framework iOS9新的类,用来替代AddressBook的相关文章

iOS9全新的联系人相关框架——Contacts Framework

iOS9全新的联系人相关框架——Contacts Framework 一.引言 在以前iOS开发中,涉及联系人相关的编程,代码都非常繁琐,并且框架的设计也不是Objective-C风格的,这使开发者用起来非常的难受.在iOS9中,apple终于解决了这个问题,全新的Contacts Framework将完全替代AddressBookFramework,AddressBookFramework也将成为历史被弃用.至于AddressBookFramework的相关api如何繁琐,在以前的博客中有记录

Xcode And iOS9新特性

Xcode And iOS9 1. Xcode7 新特性 > 可直接在真机上运行自己的应用,只需要有苹果账号,无需购买苹果开发者账号. > 可设置在出现 EXC_BAD_ACCESS 错误时,显示更详细的错误信息. 设置方式:XCode->Product->Scheme->Edit Scheme 左侧选择“Run” 右侧选择“Diagnostics(诊断)” 在“Runtime Sanitization(运行时净化处理)” 勾选“Enable Address Sanitize

iOS9 新特性总结!!!

#iOS9 新特新介绍 ##一. UIStackView * 新控件:UIStackView 栈视图, 类似AppleWatch的Group * 父类:UIView * 特点: 1. 只能垂直或水平散列,因此不能完全取代Autolayout 2. 能够快速的按顺序获取到子控件 3. 批量修改间距更快 4. 批量修改对齐方式更快 *应用场景: 1. 水平-标签/自定义TabBar 2. 垂直-设置菜单 ##二. SafariServices '' SFSafariViewController *s

iOS9新特性——堆叠视图UIStackView

iOS9新特性--堆叠视图UIStackView 一.引言 随着autolayout的推广开来,更多的app开始使用自动布局的方式来构建自己的UI系统,autolayout配合storyBoard和一些第三方的框架,对于创建约束来说,已经十分方便,但是对于一些动态的线性布局的视图,我们需要手动添加的约束不仅非常多,而且如果我们需要插入或者移除其中的一些UI元素的时候,我们又要做大量的修改约束的工作,UIStackView正好可以解决这样的问题. 二.在storyBoard上初识StackView

iOS9新特性及适配教程

iOS9网络适配_ATS:改用更安全的HTTPS(见Demo1)iOS9新特性_更灵活的后台定位(见Demo2)(网址:https://github.com/ChenYilong/iOS9AdaptationTips) WHAT(什么是SSL/TLS?跟HTTP和HTTPS有什么关系) WHY(以前的HTTP不是也能用吗?为什么要用SSL/TLS?Apple是不是又在反人类?) HOW(如何适配?---弱弱地问下:加班要多久?) 第1种情况:HTTPS Only (只有HTTPS,所有情况下都使

EF(Entity Framework)通用DBHelper通用类,增删改查以及列表

(1)通用类用法 其中 通用类名:DBhelper 实体类:UserInfo 1 //新增 2 DBHelper<UserInfo> dbhelper = new DBHelper<UserInfo>(); 3 UserInfo userinfo = new UserInfo(); 4 userinfo.Name = "1"; 5 dbhelper.Add(userinfo); 6 7 //根据条件查找列表 8 var entityes = dbhelper.F

【Android】详解7.0带来的新工具类:DiffUtil

一 概述 DiffUtil是support-v7:24.2.0中的新工具类,它用来比较两个数据集,寻找出旧数据集->新数据集的最小变化量. 说到数据集,相信大家知道它是和谁相关的了,就是我的最爱,RecyclerView. 就我使用的这几天来看,它最大的用处就是在RecyclerView刷新时,不再无脑mAdapter.notifyDataSetChanged(). 以前无脑mAdapter.notifyDataSetChanged()有两个缺点: 不会触发RecyclerView的动画(删除.

iOS9新特性之常见关键字

iOS9新特性关键字:可以用于属性.方法返回值和参数中 关键字的作用:提示作用,告诉开发者属性信息 关键字的目的:迎合swift,swift是个强语言,swift必须要指定一个对象是否为空 关键字的好处:提高代码规划,减少沟通成本 关键字使用错误仅仅报一个警告,并不会编译错误 nullable:1.怎么使用(语法)2.什么时候使用(作用) nullable的作用:可能为空 nullable 语法1 @property (nonatomic, strong nullable) NSString *

c# 获取系统版本,获取net framework 版本(Environment 类)

原文:c# 获取系统版本,获取net framework 版本(Environment 类) 1.获取当前操作系统版本信息 使用Environment.OSVersion 属性 获取包含当前平台标识符和版本号的 OperatingSystem 对象. 命名空间:  System程序集:  mscorlib(在 mscorlib.dll 中) 使用方法: Environment.OSversion.ToString(); 2.获取本机.net framework 版本信息 使用Environmen