读取手机通讯录

如今很多app都有读取手机联系人的需要,最近项目也遇到了类似的需求,这里整理下

从iOS开始,苹果废弃了以前复杂的AddressBookFramework,使用非常简单易用的Contacts Framework!

这里贴上两篇关于AddressBookFramework的博客,有兴趣的可以看看:

http://my.oschina.net/u/2340880/blog/407347

http://my.oschina.net/u/2340880/blog/407973

在Contacts Framework中,我们用到最多的就是从手机通讯录读取联系人,当然Contacts也可以向手机通讯录创建新的联系人,后面会提到!

读取联系人

引入框架:

#import <Contacts/Contacts.h>
#import <ContactsUI/ContactsUI.h>

核心代码:

- (void)viewDidLoad {[super viewDidLoad];CNContactPickerViewController * con = [[CNContactPickerViewController alloc]init];con.delegate = self;[self presentViewController:con animated:YES completion:nil];
}// 选择某一个联系人
- (void)contactPicker:(CNContactPickerViewController *)picker didSelectContact:(CNContact *)contact
{CNPhoneNumber *phoneNumber = contact.phoneNumbers[0].value; // 电话号码NSString *emailStr = contact.emailAddresses[0].value; // 邮箱NSString *company = contact.organizationName; // 公司NSLog(@"姓名:%@%@\n电话:%@\n邮箱:%@\n公司:%@",contact.familyName, contact.givenName, phoneNumber.stringValue, emailStr, company);
}

搜索联系人

引入框架:

#import <Contacts/Contacts.h>

核心代码:

在开发中,提取联系人的使用率要远远高于创建联系人,ContactFramework提取联系人的方式,类似于数据库的检索方式,通过配置条件,提取出我们需要的数据,例如:

    CNContactStore * stroe = [[CNContactStore alloc]init];
    //检索条件,检索所有名字中有zhang的联系人
    NSPredicate * predicate = [CNContact predicateForContactsMatchingName:@"zhang"];
    //提取数据
    NSArray * contacts = [stroe unifiedContactsMatchingPredicate:predicate keysToFetch:@[CNContactGivenNameKey] error:nil];

keysToFetch是设置提取联系人的哪些数据,如上则只提取出检索联系人的名字。

同样,也可以通过请求的方式来对联系人进行遍历:

    CNContactStore * stroe = [[CNContactStore alloc]init];
    CNContactFetchRequest * request = [[CNContactFetchRequest alloc]initWithKeysToFetch:@[CNContactPhoneticFamilyNameKey]];
    [stroe enumerateContactsWithFetchRequest:request error:nil usingBlock:^(CNContact * _Nonnull contact, BOOL * _Nonnull stop) {
        NSLog(@"%@",contact);
    }];

对于Contacts Framework框架的详细介绍:

1、联系人对象:CNContact

这个对象是用来配置联系人信息的,有可变的CNMutaleContact和CNContact,区别用来读取和创建联系人。CNContact对象中有许多属性,对应联系人的一些信息。

首先࿰

iOS程序猿之读取手机通讯录相关推荐

  1. android+读取电话权限,【uniapp】 读取手机通讯录权限

    现在很多APP,市场需求都需要读取我们手机上的相关权限,例如WX要读取通讯录,相册,照相机等权限,其他APP亦如此 但是在获得这些权限之前我们首先需要征得用户的统一之后才能读取 官方讲解: https ...

  2. 【uniapp】 读取手机通讯录权限

    现在很多APP,市场需求都需要读取我们手机上的相关权限,例如WX要读取通讯录,相册,照相机等权限,其他APP亦如此 但是在获得这些权限之前我们首先需要征得用户的统一之后才能读取 官方讲解: https ...

  3. 那个找不到工作的iOS程序猿

    我为什么要辞职 首先介绍一下背景,我是一枚iOS程序猿,到现在已经差不多工作3年了,今年7月底裸辞.待业之后花了半个月时间去了一趟稻城.然后差不多9月中旬左右找到新工作,开始一段新的经历. 这就是简单 ...

  4. java获取手机通讯录权限_Android读取手机通讯录联系人到自己项目

    本文实例为大家分享了Android读取手机通讯录联系人到项目的具体代码,供大家参考,具体内容如下 一.主界面代码如下: android:layout_width="match_parent& ...

  5. 微信小程序:添加到手机通讯录

    微信小程序:添加到手机通讯录 wxml: <button class="spbg" bindtap="addPhone">存入手机通讯录</b ...

  6. 最快速读取手机通讯录中联系人信息

    作为一名Android开发,读写手机通讯录的操作人人都会,但是有没有遇到通讯录存在好几百条联系人信息时候读取的速度会明显变慢呢?本文就是介绍解决办法,我总结出了以下几种办法 提供参考: 一.线程 有A ...

  7. 从此走上一条iOS程序猿不归路。。。

    新的城市,新的生活!前不久刚刚结束了苦逼的面试找工作之旅,期间也小有收货,如今正处年底工作闲暇之余,将前一阵子陆陆续续的总结整理了一下,本人菜鸟程序猿一只,水平有限,本文总结的知识不算深入,比较浅显, ...

  8. uniapp 读取手机 通讯录 分组

    最近在做跨平台开发,用到了读取通讯录的功能,但是读取到的通讯录未实现分组,这个应该是H5标准的问题,具体参考以下文档: https://www.html5plus.org/doc/zh_cn/cont ...

  9. iOS程序猿的flutter学习之路

    日常学习Flutter开发的积累 推荐一些平时自己学习Flutter开发当中接触到的优秀文章 -------------------------基础知识 ----------------------- ...

最新文章

  1. 11旋转编码器原理_科普小知识:八分钟了解电机编码器!
  2. 沈阳生态所揭示病原真菌和昆虫对温带森林木本植物物种共存的重要作用
  3. 小程序中获取高度以及设备的方法
  4. c语言复习笔记(2)--标准库中的I/O
  5. python批量上传执行脚本_python 写的批量操作远程主机脚本(命令执行,上传、下载文件)...
  6. IPhone之NSXMLParser的使用
  7. 比特币科普:区块链技术神奇在哪里?
  8. React与前端:React家族介绍
  9. HTML DOM 的nodeType属性
  10. spring boot 与配置
  11. NavicatPremium-Mac-无法打开问题
  12. lol韩服游戏内设置_英雄联盟手游韩服怎么设置中文 英雄联盟手游韩服设置中文教程...
  13. 爬虫初接触——八爪鱼采集器
  14. 如何查看谷歌浏览器的版本
  15. Fault 异常或陷阱 分析
  16. iOS8新功能新特性
  17. flink类加载器原理与隔离(flink jar包冲突)
  18. MySQL语法笔记(自用)
  19. HazelEngine 学习记录 - 2D Renderer Transforms and 2D Renderer Textures
  20. javascript里裁切图片插件库

热门文章

  1. 苹果手机如何使用IP直连?
  2. 虹科案例 | 宝马汽车共享应用程序依赖强大的HiveMQ实现可靠连接
  3. 怎么将考勤的结果用于薪资核算?
  4. NAND闪存改变了现代生活
  5. Arduino基础入门之十二 LCD1602A初步显示
  6. 一图搞懂CLR,CIL,CTS,CLS,FCL,BCL之间的关系
  7. 取消CATIA启动时自动创建的Product或Part
  8. 百度竞价账户托管,屏蔽账户恶意点击的2种策略,非常规。
  9. 启动android SDK下模拟器的方法
  10. 会议室预定软件开发流程(IPAVS BOOKING SYSTEM)