IOS开发笔记  IOS如何访问通讯录

其实我是反对这类的需求,你说你读我的隐私,我肯定不愿意的。
幸好ios6.0 以后给了个权限控制。当打开app的时候你可以选择拒绝。

实现方法:

[plain] view plaincopy
  1. //读取所有联系人
  2. -(void)ReadAllPeoples
  3. {
  4. //取得本地通信录名柄
  5. ABAddressBookRef tmpAddressBook = nil;
  6. if ([[UIDevice currentDevice].systemVersion floatValue]>=6.0) {
  7. tmpAddressBook=ABAddressBookCreateWithOptions(NULL, NULL);
  8. dispatch_semaphore_t sema=dispatch_semaphore_create(0);
  9. ABAddressBookRequestAccessWithCompletion(tmpAddressBook, ^(bool greanted, CFErrorRef error){
  10. dispatch_semaphore_signal(sema);
  11. });
  12. dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
  13. dispatch_release(sema);
  14. }
  15. else
  16. {
  17. tmpAddressBook =ABAddressBookCreate();
  18. }
  19. //取得本地所有联系人记录
  20. if (tmpAddressBook==nil) {
  21. return ;
  22. };
  23. NSArray* tmpPeoples = (NSArray*)ABAddressBookCopyArrayOfAllPeople(tmpAddressBook);
  24. for(id tmpPerson in tmpPeoples)
  25. {
  26. //获取的联系人单一属性:First name
  27. NSString* tmpFirstName = (NSString*)ABRecordCopyValue(tmpPerson, kABPersonFirstNameProperty);
  28. NSLog(@"First name:%@", tmpFirstName);
  29. [tmpFirstName release];
  30. //获取的联系人单一属性:Last name
  31. NSString* tmpLastName = (NSString*)ABRecordCopyValue(tmpPerson, kABPersonLastNameProperty);
  32. NSLog(@"Last name:%@", tmpLastName);
  33. [tmpLastName release];
  34. //获取的联系人单一属性:Nickname
  35. NSString* tmpNickname = (NSString*)ABRecordCopyValue(tmpPerson, kABPersonNicknameProperty);
  36. NSLog(@"Nickname:%@", tmpNickname);
  37. [tmpNickname release];
  38. //获取的联系人单一属性:Company name
  39. NSString* tmpCompanyname = (NSString*)ABRecordCopyValue(tmpPerson, kABPersonOrganizationProperty);
  40. NSLog(@"Company name:%@", tmpCompanyname);
  41. [tmpCompanyname release];
  42. //获取的联系人单一属性:Job Title
  43. NSString* tmpJobTitle= (NSString*)ABRecordCopyValue(tmpPerson, kABPersonJobTitleProperty);
  44. NSLog(@"Job Title:%@", tmpJobTitle);
  45. [tmpJobTitle release];
  46. //获取的联系人单一属性:Department name
  47. NSString* tmpDepartmentName = (NSString*)ABRecordCopyValue(tmpPerson, kABPersonDepartmentProperty);
  48. NSLog(@"Department name:%@", tmpDepartmentName);
  49. [tmpDepartmentName release];
  50. //获取的联系人单一属性:Email(s)
  51. ABMultiValueRef tmpEmails = ABRecordCopyValue(tmpPerson, kABPersonEmailProperty);
  52. for(NSInteger j = 0; ABMultiValueGetCount(tmpEmails); j++)
  53. {
  54. NSString* tmpEmailIndex = (NSString*)ABMultiValueCopyValueAtIndex(tmpEmails, j);
  55. NSLog(@"Emails%d:%@", j, tmpEmailIndex);
  56. [tmpEmailIndex release];
  57. }
  58. CFRelease(tmpEmails);
  59. //获取的联系人单一属性:Birthday
  60. NSDate* tmpBirthday = (NSDate*)ABRecordCopyValue(tmpPerson, kABPersonBirthdayProperty);
  61. NSLog(@"Birthday:%@", tmpBirthday);
  62. [tmpBirthday release];
  63. //获取的联系人单一属性:Note
  64. NSString* tmpNote = (NSString*)ABRecordCopyValue(tmpPerson, kABPersonNoteProperty);
  65. NSLog(@"Note:%@", tmpNote);
  66. [tmpNote release];
  67. //获取的联系人单一属性:Generic phone number
  68. ABMultiValueRef tmpPhones = ABRecordCopyValue(tmpPerson, kABPersonPhoneProperty);
  69. for(NSInteger j = 0; j < ABMultiValueGetCount(tmpPhones); j++)
  70. {
  71. NSString* tmpPhoneIndex = (NSString*)ABMultiValueCopyValueAtIndex(tmpPhones, j);
  72. NSLog(@"tmpPhoneIndex%d:%@", j, tmpPhoneIndex);
  73. [tmpPhoneIndex release];
  74. }
  75. CFRelease(tmpPhones);
  76. }
  77. //释放内存
  78. [tmpPeoples release];
  79. CFRelease(tmpAddressBook);
  80. }

解释下代码:由于ios6.0系统的升级,对客户隐私有了一个较大的提示。

以前

[plain] view plaincopy
  1. tmpAddressBook =ABAddressBookCreate();这样就可以读取了,但是现在要做一个判断了。可以具体看看代码。
[plain] view plaincopy
  1. 把通讯录取出来放在一个array里面。这样你就可以对数组进行你的要求了。
[plain] view plaincopy

备注:

苹果中文语言貌似有点问题。ios6.0  会提示你的app访问日历。。。。
然后网上查了下资料。可以参照微信访问通讯录的形式,给客户一个提示
他是在plist中  添加一项在XCode里显示的是Privacy - Contacts Usage Description。后面的string就是你要想提示的文字内容
“Privacy - Location Usage Description”。这个是定位位置提示。其他类似。

备注二:

分享一个测试经验,也是从网上看到的。
一把苹果的app访问位置或者通讯录,第一次都会有一个提示让你选择。
但是第二次及以后,即时删掉,也不会再出现了。
如果想再次出现,可以  设置-通用-还原-还原位置与隐私
这样你再次点击你的app就会再次出现了。

转载于:https://www.cnblogs.com/new0801/p/6175845.html

IOS开发笔记 IOS如何访问通讯录相关推荐

  1. iOS开发笔记--iOS应用架构谈 view层的组织和调用方案

    前言 <iOS应用架构谈 开篇>出来之后,很多人来催我赶紧出第二篇.这一篇文章出得相当艰难,因为公司里的破事儿特别多,我自己又有点私事儿,以至于能用来写博客的时间不够充分. 现在好啦,第二 ...

  2. iOS开发笔记-两种单例模式的写法

    iOS开发笔记-两种单例模式的写法 单例模式是开发中最常用的写法之一,iOS的单例模式有两种官方写法,如下: 不使用GCD #import "ServiceManager.h"st ...

  3. IOS开发笔记之推广安装(用网页判断是否安装App)

    IOS开发笔记之推广安装(用网页判断是否安装App) 在做App推广的时候,我们经常会用到网页链接下载,亦或是一张二维码,最常见的做法就是将App在iTunes中的下载链接嵌入,当用户扫描或者点击网页 ...

  4. IOS开发系列--IOS程序开发概览

    IOS开发系列--IOS程序开发概览 2014-08-04 19:42 by KenshinCui, 9983 阅读, 51 评论, 收藏, 编辑 概览 终于到了真正接触IOS应用程序的时刻了,之前我 ...

  5. 玩转iOS开发:iOS 11 新特性《UIKit新特性的基本认识》

    文章分享至我的个人技术博客: https://cainluo.github.io/15099354591154.html 前两篇, 我们讲了Xcode 9的一些新特性, 可以更加方便我们去写" ...

  6. iOS开发系列--IOS程序开发概览ios基础

    iOS开发系列--IOS程序开发概览 概览 终于到了真正接触IOS应用程序的时刻了,之前我们花了很多时间去讨论C语言.ObjC等知识,对于很多朋友而言开发IOS第一天就想直接看到成果,看到可以运行的I ...

  7. ZYNQ LINUX开发笔记——内存直接访问

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 ZYNQ LINUX开发笔记--内存直接访问 LINUX 脚本方式 C APP模式 LINUX 脚本方式 写内存: devmem 0x ...

  8. 转载大神IOS开发系列【16】--通讯录、蓝牙、内购、GameCenter、iCloud、Passbook

    转载自:http://www.cnblogs.com/kenshincui/p/4220402.html --系统应用与系统服务 iOS开发过程中有时候难免会使用iOS内置的一些应用软件和服务,例如Q ...

  9. IOS开发笔记之常用的第三方库(太多了。)

    图像: 1.图片浏览控件MWPhotoBrowser  实现了一个照片浏览器类似 iOS 自带的相册应用,可显示来自手机的图片或者是网络图片,可自动从网络下载图片并进行缓存.可对图片进行缩放等操作. ...

  10. IOS开发笔记2-C语言基础复习

    转载请标明出处: http://blog.csdn.net/hai_qing_xu_kong/article/details/53439812 本文出自:[顾林海的博客] 前言 在正式进入ios开发前 ...

最新文章

  1. Unicorn 4.6.3 发布,Rack的HTTP服务器
  2. IntelliJ IDEA使用记录
  3. java遍历树_Java实现遍历N级树形目录结构
  4. mysql cnf参数_系统运维|MySQL my.cnf参数配置优化详解
  5. python爬虫步骤-Python爬虫详解,每一个步骤都给你细腻的讲解(附源码)
  6. bash: ssh: command not found解决方法
  7. JAVA实现邮件发送
  8. 遥感常用数据下载链接
  9. 【无人机航空摄影测量精品教程】目录:Pix4d、EPS、CC、PhotoScan、Godwork项目化作业流程及注意事项汇总
  10. AVR单片机教程——DAC
  11. 异次元发卡源码/荔枝发卡V3.0二次元风格发卡网全开源源码/对接免签约支付接口
  12. 马小看前端( 在开发中遇到问题如何解决 )
  13. wordpress文章自动同步天涯博客插件wp2Tianya发布
  14. 手机手写签名 php,基于canvas实现手写签名(vue)
  15. centos7搭建开源ERP-PSI
  16. 两个有序数组A、B,长度分别为m、n,找到两个数组的第k个值并返回
  17. python分析微博粉丝_python数据分析微博热门
  18. 人散后,一钩新月天如水----丰子恺的漫画人生
  19. 浅入浅出代理模式与Spring事务管理
  20. 定位后端开发,有哪些书籍值得推荐?

热门文章

  1. maven与ant的区别
  2. 集成融云没有ipc进程的天坑
  3. CentOS7 编译安装LNMP
  4. OpenDaylight风头正劲,华三通信在其中大显身手
  5. JS与OC交互--简单使用
  6. Java 清除指定目录文件夹下文件
  7. _inflateEnd, referenced from _inflateInit_错误,
  8. java_泛型方法使用实例
  9. oracle HWM
  10. [译]5.6. Module Options 模块选项