通讯录功能的实现

iOS 提供了对通讯录操作的组建,其中一个是直接操作通讯录,另一个是调用通讯录的 UI 组建。实现方法如下:

添加AddressBook.framework到工程中。

代码实现:

 1  -(IBAction)onClickbutton:(id)sender
 2     {
 3 NSMutableArray* personArray = [[[NSMutableArray alloc] init] autorelease];  4 ABAddressBookRef addressBook = ABAddressBookCreate();  5 NSString *firstName, *lastName, *fullName;  6 personArray = (NSMutableArray *)ABAddressBookCopyArrayOfAllPeople(addressBook);  7 if ([sender tag]==0) {  8  9 for (id *person in personArray) 10  { 11 firstName = (NSString *)ABRecordCopyValue(person, kABPersonFirstNameProperty); 12 firstName = [firstName stringByAppendingFormat:@" "]; 13 lastName = (NSString *)ABRecordCopyValue(person, kABPersonLastNameProperty); 14 fullName = [firstName stringByAppendingFormat:@"%@",lastName]; 15 NSLog(@"===%@",fullName); 16 ABMultiValueRef phones = (ABMultiValueRef) ABRecordCopyValue(person, kABPersonPhoneProperty); 17 for(int i = 0 ;i < ABMultiValueGetCount(phones); i++) 18  { 19 NSString *phone = (NSString *)ABMultiValueCopyValueAtIndex(phones, i); 20 NSLog(@"===%@",phone); 21  } 22 ABMultiValueRef mails = (ABMultiValueRef) ABRecordCopyValue(person, kABPersonEmailProperty); 23 for(int i = 0 ;i < ABMultiValueGetCount(mails); i++) 24  { 25 NSString *mail = (NSString *)ABMultiValueCopyValueAtIndex(mails, i); 26 NSLog(@"==%@",mail); 27  } 28  } 29 }else { 30 //删除信息 31 //返回所有联系人到一个数组中 32 CFArrayRef personArray = ABAddressBookCopyArrayOfAllPeople(addressBook); 33 CFIndex personCount = ABAddressBookGetPersonCount(addressBook); 34 for (int i =0;i<personCount;i++){ 35 ABRecordRef ref = CFArrayGetValueAtIndex(personArray, i); 36 CFStringRef firstName1 = ABRecordCopyValue(ref, kABPersonFirstNameProperty); 37 CFStringRef lastName1 = ABRecordCopyValue(ref, kABPersonLastNameProperty); 38 NSString *contactFirstLast = [NSString stringWithFormat: @"%@%@", (NSString *)firstName1,(NSString *)lastName1]; 39 if ([contactFirstLast isEqualToString:@"徐梦"]) { 40 //删除联系人 41 ABAddressBookRemoveRecord(addressBook, ref, nil); 42  } 43  } 44 //保存电话本 45  ABAddressBookSave(addressBook, nil); 46 //释放内存 47 //CFRelease(personRef); 48 // CFRelease(addressbookRef); 49  } 50 }

完整实现(一个项目要求app能读取手机的通讯录)

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

实现方法:

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

转载于:https://www.cnblogs.com/LifeTechnologySupporter/p/4762733.html

iOS开发——高级技术通讯录功能的实现相关推荐

  1. iOS开发——高级技术内购服务

    内购服务 大家都知道做iOS开发本身的收入有三种来源:出售应用.内购和广告.国内用户通常很少直接 购买应用,因此对于开发者而言(特别是个人开发者),内购和广告收入就成了主要的收入来源.内购营销模式,通 ...

  2. iOS开发——高级技术PassBook服务

    PassBook服务 Passbook是苹果推出的一个管理登机牌.会员卡.电影票.优惠券等信息的 工具.Passbook就像一个卡包,用于存放你的购物卡.积分卡.电影票.礼品卡等,而这些票据就是一个& ...

  3. iOS开发——高级技术地图功能的实现

    地图功能的实现 因为有个项目要在地图中显示位置,所以用到了MapKit. 记录下来,以免以后忘记. 加入MapKit library 首先得在项目中加入MapKit,如图 MapView 先增加一个V ...

  4. iOS开发——高级技术本地化与国际化详解

    本地化与国际化详解 效果如下: 英语:                                                                    中文: 具体实现如下: 一 ...

  5. ios开发基础之通讯录系统实战-20

    ios开发基础之通讯录系统实战 基础知识 OC 基础 segue 的使用.delegate 代理的使用 自定义代理.面向对象思想 沙盒容器的数据持久化方案, controller 之间的跳转 ,登录方 ...

  6. IOS开发高级之点餐系统的实现-01

    IOS开发高级之点餐系统的实现-01 // // ViewController.m // 01-点餐系统 // // Created by 鲁军 on 2021/2/11. //#import &qu ...

  7. iOS开发 蓝牙技术4.0详解

    前言 前端时间,同学在做项目过程中遇到关于蓝牙方面的问题,今天我就给大家进行详细的进行讲解下蓝牙在iOS开发中的具体实现.在介绍蓝牙前,大家要搞清楚什么是蓝牙? 什么是蓝牙? 随着蓝牙低功耗技术BLE ...

  8. iOS开发 高级绘图

    概述 在iOS中可以很容易的开发出绚丽的界面效果,一方面得益于成功系统的设计,另一方面得益于它强大的开发框架.今天我们将围绕iOS中两大图形.图像绘图框架进行介绍:Quartz 2D绘制2D图形和Co ...

  9. iOS开发——高级篇——iOS开发之网络安全密码学

    一.非对称加密 - RSA : + 公钥加密,私钥解密: + 私钥加密,公钥解密: + 只能通过因式分解来破解 二.对称加密 - DES - 3DES - AES (高级密码标准,美国国家安全局使用, ...

最新文章

  1. 如何使用 Java8 实现观察者模式?(下)
  2. DevExpress的TreeList的常用属性设置以及常用事件
  3. php判断与网站访问时间,织梦CMS模板用php判断某个时间段显示和隐藏内容
  4. HDOJ---1874 畅通工程续[最短路径问题-Dijkstra算法]
  5. 张量的基本概念及应用
  6. 微信公众号吸粉8大策略,实战运营指南
  7. 天行健,君子以自强不息 ;地势坤,君子以厚德载物
  8. 滴滴2018秋招编程题
  9. php 微信朋友圈 更新时间,微信朋友圈可见天数怎么设置
  10. python反距离权重法_先从IDW(反距离权重)插值开始吧
  11. “%,/,//”的用法
  12. 解决error:torch has an invalid wheel,.dist -info directory not fount
  13. [ Windows 10 ] 任务栏按钮不显示正在打开的窗口了(打开任何程序任务栏图标按钮都不显示)
  14. 微信公众号改名后阅读量涨了吗?
  15. SpringBoot邮件服务spring-boot-starter-mail
  16. FDX-B标签RFID读写器CK-LR12-AB之Modbus Rtu协议运用规则
  17. Cuda编程加速图像预处理
  18. Avalonia 部署到麒麟信安操作系统
  19. 中层干部计算机培训学校,点亮生命之灯——纬二教育集团“中层干部领导力提升”专题培训...
  20. 回合制网游鼠标偏移解决

热门文章

  1. C/C++编译器教程之如何安装vs,看了的人应该都会装,只要不手残
  2. 技术的价值--从实验到企业实施的关键性思想
  3. 为文本添加风格text-decoration
  4. php-fpm的重启
  5. 如何在while和for中使用ssh
  6. WINDOWS SERVER 2003从入门到精通之林之间的信任关系
  7. F#学习:类型的定义和使用语法
  8. 陈年牵手徐静蕾之一箭双雕
  9. Golang之不可重入函数实现
  10. 深入理解Mysql - 索引原理详解