兄弟们,直接复制,感谢度娘,感谢谷哥!!!

1.读取联系人通讯录

/**

*  读取联系人通讯录

*/

-(NSMutableArray*)getContactList{

NSMutableArray *array = [NSMutableArray array];

//    1.获取授权状态

CNAuthorizationStatus status = [CNContactStore authorizationStatusForEntityType:CNEntityTypeContacts];

//      2.判断授权状态,如果不是已经授权,则直接返回

if (status != CNAuthorizationStatusAuthorized) {

return nil;

}

// 3.创建通信录对象

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

// 4.创建获取通信录的请求对象

// 4.1.拿到所有打算获取的属性对应的key

NSArray *keys = @[CNContactGivenNameKey, CNContactFamilyNameKey, CNContactPhoneNumbersKey,CNContactImageDataKey];

// 4.2.创建CNContactFetchRequest对象

CNContactFetchRequest *request = [[CNContactFetchRequest alloc] initWithKeysToFetch:keys];

// 5.遍历所有的联系人

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

[array addObject:contact];

}

];

return array;

}

2.增加联系人

// 创建通讯录对象

CNMutableContact * contact = [[CNMutableContact alloc]init];

contact.imageData = UIImagePNGRepresentation([UIImage imageNamed:@"22"]);

//设置名字

contact.givenName = @"三强";

//设置姓氏

contact.familyName = @"钱";

CNLabeledValue *homeEmail = [CNLabeledValue labeledValueWithLabel:CNLabelHome value:@"316045346@qq.com"];

CNLabeledValue *workEmail =[CNLabeledValue labeledValueWithLabel:CNLabelWork value:@"316045346@qq.com"];

contact.emailAddresses = @[homeEmail,workEmail];

//家庭

CONTACTS_EXTERN NSString * const CNLabelHome                            NS_AVAILABLE(10_11, 9_0);

//工作

CONTACTS_EXTERN NSString * const CNLabelWork                            NS_AVAILABLE(10_11, 9_0);

//其他

CONTACTS_EXTERN NSString * const CNLabelOther                            NS_AVAILABLE(10_11, 9_0);

// 邮箱地址

CONTACTS_EXTERN NSString * const CNLabelEmailiCloud                      NS_AVAILABLE(10_11, 9_0);

// url地址

CONTACTS_EXTERN NSString * const CNLabelURLAddressHomePage              NS_AVAILABLE(10_11, 9_0);

// 日期

CONTACTS_EXTERN NSString * const CNLabelDateAnniversary                  NS_AVAILABLE(10_11, 9_0);

contact.phoneNumbers = @[[CNLabeledValue labeledValueWithLabel:CNLabelPhoneNumberiPhone value:[CNPhoneNumber phoneNumberWithStringValue:@"12344312321"]]];

CNMutablePostalAddress * homeAdress = [[CNMutablePostalAddress alloc]init];

homeAdress.street = @"贝克街";

homeAdress.city = @"伦敦";

homeAdress.state = @"英国";

homeAdress.postalCode = @"221B";

contact.postalAddresses = @[[CNLabeledValue labeledValueWithLabel:CNLabelHome value:homeAdress]];

NSDateComponents * birthday = [[NSDateComponents  alloc]init];

birthday.day=7;

birthday.month=5;

birthday.year=1992;

contact.birthday=birthday;

//    //初始化方法

CNSaveRequest * saveRequest = [[CNSaveRequest alloc]init];

//    添加联系人(可以)

[saveRequest addContact:contact toContainerWithIdentifier:nil];

//    写入

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

[store executeSaveRequest:saveRequest error:nil];


3.删除联系人

4.更新联系人

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

//检索条件,检索所有名字中有zhang的联系人

NSPredicate * predicate = [CNContact predicateForContactsMatchingName:@"张"];

//提取数据

NSArray * contacts =[store unifiedContactsMatchingPredicate:predicate keysToFetch:@[CNContactGivenNameKey] error:nil];

CNMutableContact *contact1 = [contacts objectAtIndex:0];

//修改联系人的属性

contact1.givenName =@"heh";

//实例化一个CNSaveRequest

CNSaveRequest * saveRequest =[[CNSaveRequest alloc]init];

[saveRequest updateContact:contact1];

iOS Contact框架功能研究的更多相关文章

  1. React Native移动框架功能研究

    React Native移动框架功能研究 此篇只研究React Native框架的功能. 一.React Natvie是什么 React Native是使用React(或者说JS)来开发原生APP的框 ...

  2. iOS各框架功能简述以及系统层次结构简单分析

    iOS各个框架所对应的功能简单介绍 iOS系统结构层次:

  3. 移动app框架inoic功能研究

    原生移动app框架inoic功能研究 本篇只侧重框架提供的功能和能力的研究,请关注后续实际部署使用体验. 一.inoic是什么? inoic是一个可以使用Web技术以hybird方式开发移动app的前 ...

  4. ios - 自动布局框架编写(更多功能完善中)

    之前用的storyboard以及xib挺多的,最近看到朋友用第三方框架---自动布局约束框架在添加控件约束的时候老实报错.后来自己就试了试纯代码创建以及约束控件.但是纯代码约束一个控件还可以,如果约束 ...

  5. [iOS 主要框架的总结]

    原文地址:http://blog.csdn.net/GooHong/article/details/28911301 在iOS中框架是一个目录,包含了共享资源库,用于访问该资源库中储存的代码的头文件, ...

  6. iOS Foundation 框架基类

    iOS Foundation 框架基类 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转 ...

  7. 又一个高性能轻量级的iOS模型框架YYModel

    前言 iOS的模型框架其实有很多了,去年研究过Mantle,也了解过JSONModel.MJExtension,最近的项目项目优化的时候,再次考虑,基于轻量级.高性能的考虑,最终选择了YYModel. ...

  8. 基于Metronic的Bootstrap开发框架经验总结(8)--框架功能总体界面介绍

    在前面介绍了一系列的<基于Metronic的Bootstrap开发框架经验总结>的随笔文章,随笔主要是介绍各个知识点的内容,对框架的总体性界面没有很好的阐述,本篇随笔主要介绍这个Boots ...

  9. iOS Foundation 框架概述文档:常量、数据类型、框架、函数、公布声明

    iOS Foundation 框架概述文档:常量.数据类型.框架.函数.公布声明 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业 ...

随机推荐

  1. /proc/sys 子目录的作用

    该子目录的作用是报告各种不同的内核参数,并让您能交互地更改其中的某些.与 /proc 中所有其他文件不同,该目录中的某些文件可以写入,不过这仅针对 root. 其中的目录以及文件的详细列表将占据过多的 ...

  2. centos7下vi的用法

    vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里只是简单地介绍一下它的用法和一小部分指令.由于对Unix及Linux系统的任何版本,vi编辑器是完全相 ...

  3. python模块之xlrd,xlwt,读写execl(xls,xlsx)

    安装xlrd,xlwt pip install xlrd xlwt xlrd读取execl [环境ipython python2.7.5] import xlrd book = xlrd.open_w ...

  4. mysql 创建,授权,删除 用户

    1.创建用户 创建一个用户名是 lefunyun 密码是 X5A4FU8I0lKM21YPYUzP 账号 CREATE USER lefuyun@localhost IDENTIFIED BY 'X5 ...

  5. java基础8 构造函数和构造代码块

    一.构造函数 1 构造函数的作用 给对应的对象进行初始化. 2 构造函数的格式 修饰符 函数名(形式参数){ //函数名就是类名 函数体 } 举例说明: class Perosn{ private i ...

  6. php琐碎

    1.类中的常量,可以用类来引用: class MyClass() { const SUCCESS ="success"; const FAIL ="fail"; ...

  7. python之pandas&&DataFrame(二)

    简单操作 Python-层次聚类-Hierarchical clustering >>> data = pd.Series(np.random.randn(10),index=[[' ...

  8. Ceph 时钟偏移问题 clock skew detected 解决方案--- 部署内网NTP服务

    告警:HEALTH_WARN clock skew detected on mon.ip-10-25-195-6; 8 requests are blocked > 32 sec; Monito ...

  9. ISSCC 2017论文导读 Session 14 Deep Learning Processors,DNPU: An 8.1TOPS/W Reconfigurable CNN-RNN

    转载请注明,本文出自Bin的专栏http://blog.csdn.net/xbinworld,谢谢! DNPU: An 8.1TOPS/W Reconfigurable CNN-RNN Process ...

  10. 以Docker容器方式安装Ceph

    获取Ceph的Docker镜像 因为公司对于网络环境的限制,安装ceph时使用ceph-deploy反而很不方便,且ssh免密码方式也不适用,所以使用docker方式安装. Git地址 https:/ ...