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 创建线程主要有以下三种方 ...
随机推荐
- VMWARE使用问题
因为一些原因创建的两个虚拟机出问题了,然而里面还放了好多东西呢不想就这样删掉,就抱着试一试的心态看能不能恢复(结果真能恢复). 这里使用的方法是VMware虚拟机配置文件(.vmx)损坏修复 在这过程 ...
- QF——iOS的单例模式
iOS的单例模式: 单例,即为单个实例,确保一个类里只有一个实例,向整个系统提供一个唯一的实例. 甚至为了严格提供唯一的实例,通常只允许该类自己提供实例化的方法,不允许出现其他入口.这时我们通常得重写 ...
- QF——OC的多态,动态绑定及实现原理
多态: 封装,继承,多态是面向对象的三大特征. 那多态到底是什么呢? 多态:允许不同的类定义相同的方法,OC能自己判断当前类所对应的方法,不会混乱. 动态类型:程序直到运行时才确定对象的类型. 动态绑 ...
- SQLServer 中实现类似MySQL中的group_concat函数的功能
SQLServer中没有MySQL中的group_concat函数,可以把分组的数据连接在一起. 后在网上查找,找到了可以实现此功能的方法,特此记录下. SELECT a, stuff((SELECT ...
- Android Spinner 下拉列表
private Spinner spinner ; private List<String> list ; private ArrayAdapter< ...
- cursor的形状
Example:CSS鼠标手型效果 <a href="#" style="cursor:hand">CSS鼠标手型效果</a> Exam ...
- firefox 自写底层扩展,源码简介
还记得2010年的时候,那时候开始喜欢上了js,经常逛MDN 一开始写些简单的油猴脚本,慢慢的接触了扩展开发,发现用自己的js知识 加上firefox的插件API,可以完成好多功能. 看了很多插件的源 ...
- 使用javascript把图片转成base64位编码,然后传送到服务端(ajax调用的接口基于drupa7)
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- 关于yii2的gridview关联搜索步骤
在使用yii2构建搜索视图,经常都会使用到gridview这个组件,这个组件十分强大,通过一定的配置就能进行关联搜索,下面就是简单的步骤 需求场景:一个车系表,里面存放在品牌表的id,现在要用品牌名字 ...
- linux shell 札记
shell 数组 数组索引: 单个元素索引: ${array[n]} 全部元素: ${array[*]} 或者 ${array[@]} 部分索引: ${array[2:]} 数组所有元素统一加 ...