iOS开发——高级技术通讯录功能的实现
通讯录功能的实现
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能读取手机的通讯录)
实现方法:
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开发——高级技术通讯录功能的实现相关推荐
- iOS开发——高级技术内购服务
内购服务 大家都知道做iOS开发本身的收入有三种来源:出售应用.内购和广告.国内用户通常很少直接 购买应用,因此对于开发者而言(特别是个人开发者),内购和广告收入就成了主要的收入来源.内购营销模式,通 ...
- iOS开发——高级技术PassBook服务
PassBook服务 Passbook是苹果推出的一个管理登机牌.会员卡.电影票.优惠券等信息的 工具.Passbook就像一个卡包,用于存放你的购物卡.积分卡.电影票.礼品卡等,而这些票据就是一个& ...
- iOS开发——高级技术地图功能的实现
地图功能的实现 因为有个项目要在地图中显示位置,所以用到了MapKit. 记录下来,以免以后忘记. 加入MapKit library 首先得在项目中加入MapKit,如图 MapView 先增加一个V ...
- iOS开发——高级技术本地化与国际化详解
本地化与国际化详解 效果如下: 英语: 中文: 具体实现如下: 一 ...
- ios开发基础之通讯录系统实战-20
ios开发基础之通讯录系统实战 基础知识 OC 基础 segue 的使用.delegate 代理的使用 自定义代理.面向对象思想 沙盒容器的数据持久化方案, controller 之间的跳转 ,登录方 ...
- IOS开发高级之点餐系统的实现-01
IOS开发高级之点餐系统的实现-01 // // ViewController.m // 01-点餐系统 // // Created by 鲁军 on 2021/2/11. //#import &qu ...
- iOS开发 蓝牙技术4.0详解
前言 前端时间,同学在做项目过程中遇到关于蓝牙方面的问题,今天我就给大家进行详细的进行讲解下蓝牙在iOS开发中的具体实现.在介绍蓝牙前,大家要搞清楚什么是蓝牙? 什么是蓝牙? 随着蓝牙低功耗技术BLE ...
- iOS开发 高级绘图
概述 在iOS中可以很容易的开发出绚丽的界面效果,一方面得益于成功系统的设计,另一方面得益于它强大的开发框架.今天我们将围绕iOS中两大图形.图像绘图框架进行介绍:Quartz 2D绘制2D图形和Co ...
- iOS开发——高级篇——iOS开发之网络安全密码学
一.非对称加密 - RSA : + 公钥加密,私钥解密: + 私钥加密,公钥解密: + 只能通过因式分解来破解 二.对称加密 - DES - 3DES - AES (高级密码标准,美国国家安全局使用, ...
最新文章
- 如何使用 Java8 实现观察者模式?(下)
- DevExpress的TreeList的常用属性设置以及常用事件
- php判断与网站访问时间,织梦CMS模板用php判断某个时间段显示和隐藏内容
- HDOJ---1874 畅通工程续[最短路径问题-Dijkstra算法]
- 张量的基本概念及应用
- 微信公众号吸粉8大策略,实战运营指南
- 天行健,君子以自强不息 ;地势坤,君子以厚德载物
- 滴滴2018秋招编程题
- php 微信朋友圈 更新时间,微信朋友圈可见天数怎么设置
- python反距离权重法_先从IDW(反距离权重)插值开始吧
- “%,/,//”的用法
- 解决error:torch has an invalid wheel,.dist -info directory not fount
- [ Windows 10 ] 任务栏按钮不显示正在打开的窗口了(打开任何程序任务栏图标按钮都不显示)
- 微信公众号改名后阅读量涨了吗?
- SpringBoot邮件服务spring-boot-starter-mail
- FDX-B标签RFID读写器CK-LR12-AB之Modbus Rtu协议运用规则
- Cuda编程加速图像预处理
- Avalonia 部署到麒麟信安操作系统
- 中层干部计算机培训学校,点亮生命之灯——纬二教育集团“中层干部领导力提升”专题培训...
- 回合制网游鼠标偏移解决