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

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. acm专题--并查集

    题目来源:http://hihocoder.com/problemset/problem/1066 #1066 : 无间道之并查集 时间限制:20000ms 单点时限:1000ms 内存限制:256M ...

  2. AssetBundle——外部加载资源Asset

    几篇很不错的文章  AssetBundle创建到使用入门 全面理解Unity加载和内存管理 实用的创建AssetBundle的脚本   相关资源 相关的共享资源下载  本共享包括创建assetbund ...

  3. 【转】doxygen+graphviz生成工程中的类继承树及函数调用图

    转自----hequn8128 在阅读代码量比较多的项目时,类的继承树和函数调用图能够直观地向我们显示类之间或者函数之间的各种关系,方便我们了解程序的整体框架,很多时候可以起到事半功倍的作用.这里尝试 ...

  4. MySQL----示例知识点整理

    示例语句: ),hour(c.created_at) from `behavior_client_view` c join `behavior_share` s on c.share_uuid=s.u ...

  5. javaWeb之写一个最简单的servlet

    1. 创建一个类servletTest2 继承HttpServlet类. public class servletTest2 extends HttpServlet { public servletT ...

  6. thinkphp5 返回数组提示variable type error: array

    浏览器访问控制器函数,而函数返回的是数组: function timeArr(){ $time = array(); for($i=1;$i<=7;$i++){ $d= date('d',Tim ...

  7. n*m的矩阵,行和列都递增有序,求是否出现target元素(面试题)

    题目描述:给定一个n*m的矩阵,矩阵的每一行都是递增的,每一列也是递增的,给定一个元素target,问该target是否在矩阵中出现. 思路:先从最左下角的元素开始找,三种情况: 1. 如果该元素大于 ...

  8. 【严蔚敏】【数据结构(C语言版)】 求n的阶乘

    阶乘函数为: 使用递归即可求得. #include <stdio.h> #include <stdlib.h> int Fact(int m){ ) ; ); //递归求阶乘 ...

  9. 4. CMake 系列 - 项目添加编译选项

    目录 1. 项目目录结构 2. 相关代码 2.1 add 模块 2.2 sub 模块 2.3 example 模块 2.4 顶层 CMakeLists.txt 3. 配置&编译 1. 项目目录 ...

  10. 常用开放api【长期更新】

    获取时间: 苏宁:http://quan.suning.com/getSysTime.do 淘宝:http://api.m.taobao.com/rest/api3.do?api=mtop.commo ...