通讯录

申请访问通讯录

//实例化通讯录对象

ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, NULL);

ABAddressBookRequestAccessWithCompletion(addressBook,^(bool

granted, CFErrorRef error) {

if(granted) {

NSLog(@"授权成功!");

}else{

NSLog(@"授权失败!");

}

});

CFRelease(addressBook);

提示:申请通讯录访问授权的代码,通常放在AppDelegate中


获得所有的联系人数据

//获取所有联系人记录

CFArrayRef array = ABAddressBookCopyArrayOfAllPeople(addressBook);

NSInteger count = CFArrayGetCount(array);

for (NSInteger i = 0;i < count; ++i){

//取出一条记录

ABRecordRefperson =CFArrayGetValueAtIndex(array,i);

//取出个人记录中的详细信息

//名

CFStringReffirstNameLabel=ABPersonCopyLocalizedPropertyName(kABPersonFirstNameProperty);

CFStringReffirstName=ABRecordCopyValue(person,kABPersonFirstNameProperty);

CFStringReflastNameLabel=ABPersonCopyLocalizedPropertyName(kABPersonLastNameProperty);

//姓

CFStringReflastName=ABRecordCopyValue(person,kABPersonLastNameProperty);

NSLog(@"%@ %@ - %@ %@",lastNameLabel,lastName,firstNameLabel,firstName);

}

CoreFoundation 与 Foundation之间的桥接

//1. 获取通讯录引用

ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, nil);

//2. 获取所有联系人记录

NSArray *array = (__bridge

NSArray *)(ABAddressBookCopyArrayOfAllPeople(addressBook));

for (NSInteger i = 0;i < array.count; i++){

//取出一条记录

ABRecordRefperson = (__bridgeABRecordRef)(array[i]);

//取出个人记录中的详细信息

NSString*firstNameLabel= (__bridgeNSString*)(ABPersonCopyLocalizedPropertyName(kABPersonFirstNameProperty));

NSString*firstName= (__bridgeNSString*)(ABRecordCopyValue(person,kABPersonFirstNameProperty));

NSString*lastNameLabel= (__bridgeNSString*)(ABPersonCopyLocalizedPropertyName(kABPersonLastNameProperty));

NSString*lastName= (__bridgeNSString*)(ABRecordCopyValue(person,kABPersonLastNameProperty));

NSLog(@"%@ %@ - %@ %@",lastNameLabel,lastName,firstNameLabel,firstName);

}

CFRelease(addressBook);

结论:转换看起来很美~~~

多重属性

联系人的有些属性值就没这么简单,一个属性可能会包含多个值

比如邮箱,分为工作邮箱、住宅邮箱、其他邮箱等

比如电话,分为工作电话、住宅电话、其他电话等

如果是复杂属性,那么ABRecordCopyValue函数返回的就是ABMultiValueRef类型的数据,例如邮箱或者电话

//取电话号码

ABMultiValueRef phones = ABRecordCopyValue(person, kABPersonPhoneProperty);

//取记录数量

NSInteger phoneCount = ABMultiValueGetCount(phones);

//遍历所有的电话号码

for (NSInteger i = 0; i < phoneCount; i++)

{

获取复杂属性的方法

//电话标签

CFStringRef phoneLabel = ABMultiValueCopyLabelAtIndex(phones, i);

// 本地化电话标签

CFStringRef phoneLocalLabel = ABAddressBookCopyLocalizedLabel(phoneLabel);

// 电话号码

CFStringRef phoneNumber = ABMultiValueCopyValueAtIndex(phones, i);


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 如何访问用户的通讯录 在iOS中,有2个框架可以访问用户的通讯录 AddressBookUI.framework ...
    JonesCxy阅读 4,189评论 0 2
  • 在ios中,有两个框架可以访问用户的通讯录 AddressBookUI.framework提供了联系人列表界面, ...
    Manba_小洛阅读 4,549评论 4 12
  • 内容概述 iOS给我们提供了四个框架来供我们使用:iOS9之前,有AddressBookUI.framewor...
    leesum阅读 4,925评论 0 3
  • 在开发一些应用中,我们如果需要iPhone设备中的通讯录信息。或者,需要开发通讯录相关的一些功能。那么就需要了解一...
    乡村小子阅读 4,902评论 0 1
  • 我是一粒沙子 想要出彩 必定有只蚌愿意用它最柔软的心 忍受我所有的蛮横和任性 我哭着寻找 一直找不到那只蚌 许多年...
    萝卜衣阅读 1,720评论 4 2

友情链接更多精彩内容