#import <ContactsUI/ContactsUI.h>

新增联系人

CNMutableContact * contact = [[CNMutableContact alloc] init];
// 头像
contact.imageData = UIImagePNGRepresentation([UIImage imageNamed:@"avatar"]);
// 设置名字
contact.givenName = @"三";
// 设置姓氏
contact.familyName = @"张";
// 邮箱
CNLabeledValue *homeEmail = [CNLabeledValue labeledValueWithLabel:CNLabelHome value:@"hello@163.com"];
CNLabeledValue *workEmail = [CNLabeledValue labeledValueWithLabel:CNLabelWork value:@"world@163.com"];
contact.emailAddresses = @[homeEmail,workEmail];
// 手机号
contact.phoneNumbers = @[[CNLabeledValue labeledValueWithLabel:CNLabelPhoneNumberiPhone value:[CNPhoneNumber phoneNumberWithStringValue:@"12344445555"]]];
// 地址
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];

//家庭
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 CNLabelSchool                             NS_AVAILABLE(10_15, 13_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);

删除联系人

CNContactStore *store = [[CNContactStore alloc] init];
//检索条件,检索所有名字中FamilyName包含A的联系人
NSPredicate *predicate = [CNContact predicateForContactsMatchingName:@"A"];
//提取数据
NSArray *contacts = [store unifiedContactsMatchingPredicate:predicate keysToFetch:@[CNContactFamilyNameKey] error:nil];CNSaveRequest *saveRequest = [[CNSaveRequest alloc] init];
for (CNContact *contact in contacts) {CNMutableContact *contact1 = [contact mutableCopy];// 删除联系人[saveRequest deleteContact:contact1];
}
[store executeSaveRequest:saveRequest error:nil];

修改联系人

CNContactStore * store = [[CNContactStore alloc] init];
//检索条件,检索所有名字中有A的联系人
NSPredicate * predicate = [CNContact predicateForContactsMatchingName:@"A"];
//提取数据,要修改的必需先提取出来,放在keysToFetch中提取
NSArray * contacts = [store unifiedContactsMatchingPredicate:predicate keysToFetch:@[CNContactGivenNameKey] error:nil];CNSaveRequest * saveRequest = [[CNSaveRequest alloc] init];
for (CNContact *contact in contacts) {CNMutableContact *contact1 = [contact mutableCopy];// 编辑联系人contact1.givenName = @"B";[saveRequest updateContact:contact1];
}
[store executeSaveRequest:saveRequest error:nil];

读取联系人

NSMutableArray *array = [NSMutableArray array];
// 获取授权状态
CNAuthorizationStatus status = [CNContactStore authorizationStatusForEntityType:CNEntityTypeContacts];
// 判断授权状态,如果不是已经授权,则直接返回
if (status != CNAuthorizationStatusAuthorized) {return nil;
}// 创建通信录对象
CNContactStore *store = [[CNContactStore alloc] init];// 创建获取通信录的请求对象
// 拿到所有打算获取的属性对应的key
NSArray *keys = @[CNContactGivenNameKey, CNContactFamilyNameKey, CNContactPhoneNumbersKey, CNContactImageDataKey];// 创建CNContactFetchRequest对象
CNContactFetchRequest *request = [[CNContactFetchRequest alloc] initWithKeysToFetch:keys];// 遍历所有的联系人
[store enumerateContactsWithFetchRequest:request error:nil usingBlock:^(CNContact * _Nonnull contact, BOOL * _Nonnull stop) {[array addObject:contact];
}];

iOS使用CNContact对通讯录增删改查相关推荐

  1. 【iOS】日历行程的增删改查(完整)

    前言 我们可以使用系统提供的EventKit框架来访问和操作用户的日历日程和提醒(虽然日历和提醒是两个独立的app,但是是用同一个框架来处理数据).同样地,日历和提醒的数据的数据,都是存储在同一个叫做 ...

  2. android通讯录增删改查,android 通话记录的增删改查 .

    //获取当前的手机号 public String getLocalNumber() { Context context = getApplicationContext(); TelephonyMana ...

  3. Android 绿豆通讯录【SQLite数据库---数据库(增删改查、展示数据)】

    前情提要:Android 数据库(SQLite) [简介.创建.使用(增删改查.事务.实战演练).数据显示控件(ListView.Adapter.实战演练-绿豆通讯录)] https://blog.c ...

  4. Android 绿豆通讯录【 SQLite数据库(增删改查、展示数据) + ListView数据展示控件(展示所有数据) 】

    前情提要:Android 数据库(SQLite) [简介.创建.使用(增删改查.事务.实战演练).数据显示控件(ListView.Adapter.实战演练-绿豆通讯录)] https://blog.c ...

  5. IOS开发基础之SQLite3数据库的使用增删改查

    IOS开发基础之SQLite3数据库的使用增删改查 ios开发我们可能会使用到数据库进行持久化存储.sqlite3 是轻量级的数据库. 今天我们来介绍sqlite3 数据库.此方法跟java的增删改查 ...

  6. iOS CoreData (一) 增删改查

    代码地址如下: http://www.demodashi.com/demo/11041.html Core Data是iOS5之后才出现的一个框架,本质上是对SQLite的一个封装,它提供了对象-关系 ...

  7. 华山论剑之iOS中(数组,字典,SQLite,CoreData)的“增删改查“

    我们的生活态度就应该是 "不抱怨" ! 其实我想写这篇文章很久了,因为自己做的iOS开发 ,对数据这一块有这极高的要求.所以一些必须的存储数据的使用,我们都有必要熟悉用法.在以前我 ...

  8. JAVA 通讯录 —— 实现对XML文件数据的增删改查

    心血来潮,带着好奇写了人生中第一篇博客,哈哈哈哈 ~ 嗝 ~ ~   这篇文章主要就是分享自己做的一次项目作业,一是为了分享,二是用另外一种方式保存自己的代码 嘻嘻嘻 ~.还是个编程萌新,所以有啥写的 ...

  9. Java课设-简单的通讯录系统(增删改查连接数据库)

    一.题目介绍 二.实验思路 这里主要是运用到了jdbc来连接数据库,而在数据库中存在的是通讯录的记录,有id,姓名,手机号,创建时间,修改时间.同时使用的是swing的来做可视化界面,其中运用到了弹窗 ...

最新文章

  1. SQL Server-游标使用
  2. 全球及中国特殊教育行业十四五趋势展望与发展战略建议报告2022版
  3. linux 总数 进程_linux性能监控之 top 家族(1)
  4. 马哥2016全新Linux+Python高端运维班第七周作业
  5. C#中HTML和UBB互相转换的代码
  6. 【docker】查看docker镜像的版本号TAG,从远程仓库拉取自己想要版本的镜像
  7. Linux 邮件服务器 之跟我一步一步来实现一个邮件系统
  8. centos7永久修改主机名
  9. 基于python的opc读写和导入MSSQL/MYSQL的KepOPC中间件
  10. 程序员的节日!干杯!
  11. 教师计算机西沃培训心得,希沃电子白板学习心得体会
  12. 语义计算、知识图谱与智能问答(医药常识问答实例)
  13. 接触式光电位移传感器的原理是
  14. Tensorflow Serving部署模型
  15. Centos6连接网络配置
  16. python——函数(定义函数、传递实参、返回值、传递列表、传递任意数量的实参、将函数存储在模块中、函数编写指南)
  17. 我的世界服务器怎么弄无限矿物,《我的世界》无限存储空间设备如何制作?
  18. 微型计算机显示器接口,微型计算机接口技术8-2LED显示器接口-Read.PPT
  19. 乐趣国学—品读“富润屋,德润身。”中的智慧
  20. 几行代码就能去除图像和视频背景,还用啥PS

热门文章

  1. 用户和组管理及思维导图
  2. Android jenkins 自动化打包
  3. iView级联选择器Cascader回显慢的问题
  4. 信息与计算机科学丛书,信息与计算科学丛书: 典藏版
  5. xilinx platform cable usb驱动_小白入门多路高速(8 x 8bits x 100Msps)AD驱动设计专栏启动预告...
  6. ssm(spring mvc+mybatis)+netty4开发qiq
  7. 算法-入门篇(欧式距离)
  8. 小米手机微信无法连接到服务器1-1,小米1S系统版本低不能登录微信解决办法
  9. MTK芯片平台,MT6737烧录工具资料(SP_Flash_Tool_exe_Windows_v5.1712.00.000)
  10. 第一部分 知己知彼