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 创建线程主要有以下三种方 ...
随机推荐
- [一个经典的多线程同步问题]解决方案三:互斥量Mutex
本篇通过互斥量来解决线程的同步,学习其中的一些知识. 互斥量也是一个内核对象,它用来确保一个线程独占一个资源的访问.互斥量与关键段的行为非常相似,并且互斥量可以用于不同进程中的线程互斥访问资源.使用互 ...
- getchar()用法
getchar() .从缓冲区读走一个字符,相当于清除缓冲区 .前面的scanf()在读取输入时会在缓冲区中留下一个字符'\n'(输入完s[i]的值后按回车键所致),所以如果不在此加一个getchar ...
- QF——iOS沙盒机制
iOS沙盒机制: 什么是沙盒机制? 点击进入 点击进入 沙盒机制(SandBox)是一种安全体系,它规定了APP的所有文件数据都必须存储在这片区域.所有非代码文件的数据都保存在这片区域. 沙盒里有 ...
- hadoop笔记之MapReduce的运行流程
MapReduce的运行流程 MapReduce的运行流程 基本概念: Job&Task:要完成一个作业(Job),就要分成很多个Task,Task又分为MapTask和ReduceTask ...
- css3中动画animation的应用
<!DOCTYPE html> <html> <head> <style> /* @-webkit-keyframes anim1 { // 规定动画. ...
- C#.NET中的CTS、CLS和CLR
以下内容来自:http://www.cnblogs.com/zagelover/articles/2741370.html 在学习.NET的过程中,都会不可避免地接触到这三个概念,那么这三个东西是什么 ...
- 梯度下降算法的一点认识(Ng第一课)
昨天开始看Ng教授的机器学习课,发现果然是不错的课程,一口气看到第二课. 第一课 没有什么新知识,就是机器学习的概况吧. 第二课 出现了一些听不太懂的概念.其实这堂课主要就讲了一个算法,梯度下降算法. ...
- 【POJ】2528 Mayor's posters ——离散化+线段树
Mayor's posters Time Limit: 1000MS Memory Limit: 65536K Description The citizens of Bytetown, A ...
- try,catch捕获错误的用法
<!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <script&g ...
- html中文乱码
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">改成<m ...