IOS开发笔记 IOS如何访问通讯录
IOS开发笔记 IOS如何访问通讯录
实现方法:
- //读取所有联系人
- -(void)ReadAllPeoples
- {
- //取得本地通信录名柄
- ABAddressBookRef tmpAddressBook = nil;
- if ([[UIDevice currentDevice].systemVersion floatValue]>=6.0) {
- tmpAddressBook=ABAddressBookCreateWithOptions(NULL, NULL);
- dispatch_semaphore_t sema=dispatch_semaphore_create(0);
- ABAddressBookRequestAccessWithCompletion(tmpAddressBook, ^(bool greanted, CFErrorRef error){
- dispatch_semaphore_signal(sema);
- });
- dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
- dispatch_release(sema);
- }
- else
- {
- tmpAddressBook =ABAddressBookCreate();
- }
- //取得本地所有联系人记录
- if (tmpAddressBook==nil) {
- return ;
- };
- NSArray* tmpPeoples = (NSArray*)ABAddressBookCopyArrayOfAllPeople(tmpAddressBook);
- for(id tmpPerson in tmpPeoples)
- {
- //获取的联系人单一属性:First name
- NSString* tmpFirstName = (NSString*)ABRecordCopyValue(tmpPerson, kABPersonFirstNameProperty);
- NSLog(@"First name:%@", tmpFirstName);
- [tmpFirstName release];
- //获取的联系人单一属性:Last name
- NSString* tmpLastName = (NSString*)ABRecordCopyValue(tmpPerson, kABPersonLastNameProperty);
- NSLog(@"Last name:%@", tmpLastName);
- [tmpLastName release];
- //获取的联系人单一属性:Nickname
- NSString* tmpNickname = (NSString*)ABRecordCopyValue(tmpPerson, kABPersonNicknameProperty);
- NSLog(@"Nickname:%@", tmpNickname);
- [tmpNickname release];
- //获取的联系人单一属性:Company name
- NSString* tmpCompanyname = (NSString*)ABRecordCopyValue(tmpPerson, kABPersonOrganizationProperty);
- NSLog(@"Company name:%@", tmpCompanyname);
- [tmpCompanyname release];
- //获取的联系人单一属性:Job Title
- NSString* tmpJobTitle= (NSString*)ABRecordCopyValue(tmpPerson, kABPersonJobTitleProperty);
- NSLog(@"Job Title:%@", tmpJobTitle);
- [tmpJobTitle release];
- //获取的联系人单一属性:Department name
- NSString* tmpDepartmentName = (NSString*)ABRecordCopyValue(tmpPerson, kABPersonDepartmentProperty);
- NSLog(@"Department name:%@", tmpDepartmentName);
- [tmpDepartmentName release];
- //获取的联系人单一属性:Email(s)
- ABMultiValueRef tmpEmails = ABRecordCopyValue(tmpPerson, kABPersonEmailProperty);
- for(NSInteger j = 0; ABMultiValueGetCount(tmpEmails); j++)
- {
- NSString* tmpEmailIndex = (NSString*)ABMultiValueCopyValueAtIndex(tmpEmails, j);
- NSLog(@"Emails%d:%@", j, tmpEmailIndex);
- [tmpEmailIndex release];
- }
- CFRelease(tmpEmails);
- //获取的联系人单一属性:Birthday
- NSDate* tmpBirthday = (NSDate*)ABRecordCopyValue(tmpPerson, kABPersonBirthdayProperty);
- NSLog(@"Birthday:%@", tmpBirthday);
- [tmpBirthday release];
- //获取的联系人单一属性:Note
- NSString* tmpNote = (NSString*)ABRecordCopyValue(tmpPerson, kABPersonNoteProperty);
- NSLog(@"Note:%@", tmpNote);
- [tmpNote release];
- //获取的联系人单一属性:Generic phone number
- ABMultiValueRef tmpPhones = ABRecordCopyValue(tmpPerson, kABPersonPhoneProperty);
- for(NSInteger j = 0; j < ABMultiValueGetCount(tmpPhones); j++)
- {
- NSString* tmpPhoneIndex = (NSString*)ABMultiValueCopyValueAtIndex(tmpPhones, j);
- NSLog(@"tmpPhoneIndex%d:%@", j, tmpPhoneIndex);
- [tmpPhoneIndex release];
- }
- CFRelease(tmpPhones);
- }
- //释放内存
- [tmpPeoples release];
- CFRelease(tmpAddressBook);
- }
解释下代码:由于ios6.0系统的升级,对客户隐私有了一个较大的提示。
- tmpAddressBook =ABAddressBookCreate();这样就可以读取了,但是现在要做一个判断了。可以具体看看代码。
- 把通讯录取出来放在一个array里面。这样你就可以对数组进行你的要求了。
备注:
备注二:
IOS开发笔记 IOS如何访问通讯录的更多相关文章
- iOS开发笔记7:Text、UI交互细节、两个动画效果等
Text主要总结UILabel.UITextField.UITextView.UIMenuController以及UIWebView/WKWebView相关的一些问题. UI细节主要总结界面交互开发中 ...
- iOS开发笔记-两种单例模式的写法
iOS开发笔记-两种单例模式的写法 单例模式是开发中最常用的写法之一,iOS的单例模式有两种官方写法,如下: 不使用GCD #import "ServiceManager.h" ...
- iOS开发笔记--什么时候调用layoutSubviews
iOS开发笔记--什么时候调用layoutSubviews 分类: iOS2014-04-22 16:15 610人阅读 评论(0) 收藏 举报 今天在写程序时候遇见layoutSubviews触发时 ...
- IOS开发笔记(4)数据离线缓存与读取
IOS开发笔记(4)数据离线缓存与读取 分类: IOS学习2012-12-06 16:30 7082人阅读 评论(0) 收藏 举报 iosiOSIOS 方法一:一般将服务器第一次返回的数据保存在沙盒里 ...
- 【Swift】iOS开发笔记(二)
前言 这个系列主要是一些开发中遇到的坑记录分享,有助于初学者跨过这些坑,攒够 7 条发一篇. 声明 欢迎转载,但请保留文章原始出处:) 博客园:http://www.cnblogs.com 农民伯 ...
- 菜鸟手下的iOS开发笔记(swift)
在阳春4月的一天晨会上,有一个老板和蔼的对他的一个菜鸟手下说:“你既然会Android,那你能不能开发iOS?” 不是说好的要外包的吗?内心跌宕,但是表面淡定的菜鸟手下弱弱的回道:“可以试试”. 第二 ...
- 玩转iOS开发:iOS中的GCD开发(三)
上一章, 我们了解到了GCD里的一些队列和任务的知识, 也实践了一下, 同时我们也对主队列的一些小情况了解了一下, 比如上一章讲到的卡线程的问题, 如果没有看的朋友可以去看看玩转iOS开发:iOS中的 ...
- iOS开发笔记4:HTTP网络通信及网络编程
这一篇主要总结iOS开发中进行HTTP通信及数据上传下载用到的方法.网络编程中常用的有第三方类库AFNetworking或者iOS7开始新推出的NSURLSession,还有NSURLSession的 ...
- iOS开发笔记5:多线程之NSThread、NSOperation及GCD
这篇主要总结下iOS开发中多线程的使用,多线程开发一般使用NSThread.NSOperation及GCD三种方式,常用GCD及NSOperation. 1.NSThread 创建线程主要有以下三种方 ...
随机推荐
- SSH整合,applicationContext.xml中配置hibernate映射文件问题
今天在applicationContext.xml中配置sessionFactory时遇到了各种头疼的问题,现在总结一下: 1.<property name="mappingDirec ...
- [置顶] ubuntu12.04下编译opencv程序
ubuntu12.04下编译opencv程序 1.在ubuntu下安装好 opencv后(建议使用apt-get install 来安装) 2.使用程序FaceExaple.c来进行测试程序 #inc ...
- Mac Please try running this command again as root/Administrator.
mac 终端安装程序,需要权限,出现以下提示语句: Please try running this command again as root/Administrator. 需要执行以下命令即可: s ...
- php分页类及其实现原理
/** * * 实现思路:分页显示拆分 : 1...上页 12 13 14 15 [16] 17 18 19 20 ...100 下页 * * function htmlPart1() : 上页 * ...
- php 异步处理的gearman
1. php 是进程处理,单线程到的,没有异步机制,在一些处理花费时间较多的情况导致用户体验较差.可以使用gearman 进行异步处理. 2. gearman 是一个异步处理的socket架构. 需要 ...
- php传参方式1--ajax
AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术. AJAX = 异步 JavaScript和 ...
- poj 2723 Get Luffy Out 二分+2-sat
题目链接 给n个钥匙对, 每个钥匙对里有两个钥匙, 并且只能选择一个. 有m扇门, 每个门上有两个锁, 只要打开其中一个就可以通往下一扇门. 问你最多可以打开多少个门. 对于每个钥匙对, 如果选择了其 ...
- SQL Server 恢复过程
在恢复过程中.只会分析那些自最后一个检查点之后发生的更改,以确定是否需要重做还是撤销. 在最后一个检查点之前完成的操作都会精确的反应到数据文件中,恢复过程不需要做其它的事. 第一阶段: 分析. 这个阶 ...
- Syslog Cisco Incident
http://www.cisco.com/web/about/security/intelligence/identify-incidents-via-syslog.html
- Cortex-M3 .s启动文件分析
1. 基本概念(CMSIS): Cortex Micro-controller Software Interface Standard,微控制器软件接口标准. 2. CMSIS标准的文件结构: a) ...