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

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. [001] leap_stage

    [Description] There is a number in each stages that indicates the most stages you can leap up. Now, ...

  2. TreeSet基本用法

    TreeSet的基础方法: public class TreeSetTest { public static void main(String[] args) { TreeSet nums = new ...

  3. maven实战系列

    Maven实战(一)安装和配置 Maven实战(二)构建简单Maven项目 Maven实战(三)Eclipse构建Maven项目 Maven实战(四)生命周期 Maven实战(五)坐标详解 Maven ...

  4. 修改TortoiseSVN客户端登陆用户

    TortoiseSVN是一款常用且非常不错的SVN工具,俗称小乌龟.开发的时候,经常用的当然是TortoiseSVN客户端了. 一般情况下,TortoiseSVN服务器提供的IP地址和用户都不会变,而 ...

  5. linux的fwrite()使用方法,当前时间写入文本的程序

    fwrite函数 1.函数功能 用来读写一个数据块. 2.一般调用形式 fwrite(buffer,size,count,fp); 3.说明 (1)buffer:是一个指针,对fread来说,它是读入 ...

  6. python进行des加密解密,而且可以与JAVA进行互相加密解密

    import binasciifrom pyDes import des, CBC, PAD_PKCS5import uuidimport time # pip install -i https:// ...

  7. Android 下使用 JSON 实现 HTTP 请求,外加几个示例!

    不得不说,JSON 格式的确是非常美妙的,速度快而且简化了很多操作在 Android 下,Android SDK 已经为我们封装好了整个与 JSON 有关的操作,使用非常方便 以下就是一个标准的 JS ...

  8. ubuntu1604 安装samba

    ubuntu1604 安装samba sudo apt-get install samba 更改/etc/samba/smb.conf添加[share]comment = sharepath = /h ...

  9. 洛谷P4071 [SDOI2016] 排列计数 [组合数学]

    题目传送门 排列计数 题目描述 求有多少种长度为 n 的序列 A,满足以下条件: 1 ~ n 这 n 个数在序列中各出现了一次 若第 i 个数 A[i] 的值为 i,则称 i 是稳定的.序列恰好有 m ...

  10. C++ 四种显示转换

    转自:http://www.jellythink.com/archives/205   (果冻想) 前言 这篇文章总结的是C++中的类型转换,这些小的知识点,有的时候,自己不是很注意,但是在实际开发中 ...