通讯录联系人相关的应用iPhone提供了两个框架:AddressBook.framework和AddressBookUI.framework,使用这两个框架我们可以在程序中访问并显示iPhone数据库中的联系人信息。

1.AddressBookUI显示部分

AddressBookUI中提供了和联系人显示信息相关的一些Controller,有四个:

ABPeoplePickerNavigationController:显示整个通讯录并可以选择一个联系人的信息

ABPersonViewController:显示一个具体联系人的信息

ABNewPersonViewController:增加一个新的联系人

ABUnknownPersonViewController:完善一个联系人的信息

由于其中最主要的是ABPeoplePickerNavigationController,因此就具体的介绍一下通过程序显示整个通讯录并且可以选择其中某个联系人信息的步骤。

(a)创建并初始化一个ABPeoplePickerNavigationController对象

(b)设置其代理(delegate)

(c)用presentModalViewController:animated:这个方法进行显示整个通讯录页面

例子:

  1. - (IBAction)showPicker:(id)sender {
  2. ABPeoplePickerNavigationController *picker =
  3. [[ABPeoplePickerNavigationController alloc] init];
  4. picker.peoplePickerDelegate = self;
  5. [self presentModalViewController:picker animated:YES];
  6. [picker release];
  7. }

ABPeoplePickerNavigationControllerDelegate的方法介绍

(1)

  1. peoplePickerNavigationControllerDidCancel:

当用户选择取消时调用这个方法,可以在这个方法里取消整个通讯录页面的显示。

(2)

  1. peoplePickerNavigationController:shouldContinueAfterSelectingPerson:

当用户选择了通讯录中某一个联系人时调用这个方法,可以在这里获取联系人的信息。如果希望可以继续显示这个联系人更具体的信息,则return YES。否则取消整个通讯录页面的显示并return NO。

(3)

  1. eoplePickerNavigationController:shouldContinueAfterSelectingPerson:property:identifier:

如果上一个方法返回的是YES,则会显示某一个联系人信息,如果选择了联系人的某一项纪录,就会调用这个方法,可以通过点击选择联系人的某一项信息。如果希望可以对选择的某一项纪录进行进一步操作,比如直接拨打电话或调用邮箱发送邮件,则return YES。否则取消整个通讯录页面的显示并return NO。

例子:

  1. - (void)peoplePickerNavigationControllerDidCancel:(ABPeoplePickerNavigationController *)peoplePicker {
  2. // assigning control back to the main controller
  3. [picker dismissModalViewControllerAnimated:YES];
  4. }
  5. - (BOOL)peoplePickerNavigationController: (ABPeoplePickerNavigationController *)peoplePicker
  6. shouldContinueAfterSelectingPerson:(ABRecordRef)person {
  7. //获取联系人姓名
  8. name.text = (NSString*)ABRecordCopyCompositeName(person);
  9. //获取联系人电话
  10. ABMutableMultiValueRef phoneMulti = ABRecordCopyValue(person, kABPersonPhoneProperty);
  11. NSMutableArray *phones = [[NSMutableArray alloc] init];
  12. int i;
  13. for (i = 0; i < ABMultiValueGetCount(phoneMulti); i++) {
  14. NSString *aPhone = [(NSString*)ABMultiValueCopyValueAtIndex(phoneMulti, i) autorelease];
  15. NSString *aLabel = [(NSString*)ABMultiValueCopyLabelAtIndex(phoneMulti, i) autorelease];
  16. NSLog(@"PhoneLabel:%@ Phone#:%@",aLabel,aPhone);
  17. if([aLabel isEqualToString:@"_$!<Mobile>!$_"])
  18. {
  19. [phones addObject:aPhone];
  20. }
  21. }
  22. phoneNo.text=@"";
  23. if([phones count]>0)
  24. {
  25. NSString *mobileNo = [phones objectAtIndex:0];
  26. phoneNo.text = mobileNo;
  27. //NSLog(mobileNo);
  28. }
  29. //获取联系人邮箱
  30. ABMutableMultiValueRef emailMulti = ABRecordCopyValue(person, kABPersonEmailProperty);
  31. NSMutableArray *emails = [[NSMutableArray alloc] init];
  32. for (i = 0;i < ABMultiValueGetCount(emailMulti); i++)
  33. {
  34. NSString *emailAdress = [(NSString*)ABMultiValueCopyValueAtIndex(emailMulti, i) autorelease];
  35. [emails addObject:emailAdress];
  36. }
  37. email.text=@"";
  38. if([emails count]>0)
  39. {
  40. NSString *emailFirst=[emails objectAtIndex:0];
  41. email.text = emailFirst;
  42. //NSLog(emailFirst);
  43. }
  44. [peoplePicker dismissModalViewControllerAnimated:YES];
  45. return NO;
  46. }
  47. - (BOOL)peoplePickerNavigationController: (ABPeoplePickerNavigationController *)peoplePicker
  48. shouldContinueAfterSelectingPerson:(ABRecordRef)person
  49. property:(ABPropertyID)property
  50. identifier:(ABMultiValueIdentifier)identifier{
  51. return NO;
  52. }

2.AddressBook部分

AddressBook框架部分主要是记录联系人的各个信息,ABRecordRef类型的记录既可以代表单个人(kABPersonType),也可以是一个集合(kABGroupType)。

通讯录中联系人的各个属性有两种形式,单值属性和多值属性。单值属性对应的只有一个值,比如联系人的姓名;多值属性对应的可能有多个值,比如联系人有多个电话号码等。

(a)常用方法

  1. CFTypeRef ABRecordCopyValue (
  2. ABRecordRef record,
  3. ABPropertyID property
  4. );

从一个记录中获取某个属性对应的值

(b)单值属性对应的方法

  1. CFStringRef ABRecordCopyCompositeName (
  2. ABRecordRef record
  3. );

获取联系人完整的姓名。

(c)多值属性对应的方法

  1. CFTypeRef ABMultiValueCopyValueAtIndex (
  2. ABMultiValueRef multiValue,
  3. CFIndex index
  4. );

返回对应位置处的属性值

  1. CFStringRef ABMultiValueCopyLabelAtIndex (
  2. ABMultiValueRef multiValue,
  3. CFIndex index
  4. );

返回对应位置处的属性标识

  1. CFArrayRef ABMultiValueCopyArrayOfAllValues (
  2. ABMultiValueRef multiValue
  3. );

返回包含所有属性值的数组

  1. CFIndex ABMultiValueGetCount (
  2. ABMultiValueRef multiValue
  3. );

返回属性值的个数

例子:

  1. //获取联系人姓名
  2. name.text = (NSString*)ABRecordCopyCompositeName(person);
  3. //获取联系人电话
  4. ABMutableMultiValueRef phoneMulti = ABRecordCopyValue(person, kABPersonPhoneProperty);
  5. NSMutableArray *phones = [[NSMutableArray alloc] init];
  6. int i;
  7. for (i = 0; i < ABMultiValueGetCount(phoneMulti); i++) {
  8. NSString *aPhone = [(NSString*)ABMultiValueCopyValueAtIndex(phoneMulti, i) autorelease];
  9. NSString *aLabel = [(NSString*)ABMultiValueCopyLabelAtIndex(phoneMulti, i) autorelease];
  10. NSLog(@"PhoneLabel:%@ Phone#:%@",aLabel,aPhone);
  11. if([aLabel isEqualToString:@"_$!<Mobile>!$_"])
  12. {
  13. [phones addObject:aPhone];
  14. }
  15. }

by gqzhu

http://shanshandaocao-163-com.iteye.com/blog/1390221

转载于:https://www.cnblogs.com/ydhliphonedev/archive/2012/07/31/2616358.html

【转】iPhone通讯录AddressBook.framework和AddressBookUI.framework的应用相关推荐

  1. 手机通讯录AddressBook的使用

    通过使用两个框架:AddressBook.framework和AddressBookUI.framework,我们可以在程序中访问并显示iPhone数据库中的联系人信息. 1.AddressBookU ...

  2. iphone读取addressbook

    1.添加addressbook.framework 2.在需要的源文件中 #import <AddressBook/AddressBook.h> #import <AddressBo ...

  3. ios Standard Framework和Umbrella Framework

    Standard Framework:标准库,通过引用对应的header文件而不是引用master header 文件来引用类(也可以通过引用Master Header file来引用需要使用的类), ...

  4. iphone通讯录批量删除_iPhone通讯录删除了如何恢复?用对方法快速找回,亲测有效!_...

    2020年11月03日 16:50作者:黄页编辑:黄页 iPhone通讯录删除了如何恢复?很多时候我们都已经习惯了用微信去传递感情,去跟朋友或者是同事沟通,因为这样既方便又快捷,小编也是如此.但是很多 ...

  5. iPhone通讯录导入及备份方法

    现在大家经常更换手机,刚接触iphone的朋友可能会无从下手,下面介绍两种方法: 方法1:把原有手机卡(SIM)上的通讯录导入iphone iPhone手机使用手册-"通讯录"操作 ...

  6. iphone通讯录备份怎么导出来

    现在手机已经成为用户必不可少的社交工具之一,而手机上的通讯录是非常重要的,最直接连接的途径,那么iPhone通讯录备份怎么导出来呢?如何才能导出来轻松传输到另一台手机上呢,下面就为大家带来一个通讯录导 ...

  7. 苹果电话录到android,iphone通讯录导出到安卓手机教程

    目前市面上的手机,除了iphone,大多数就是安卓了.不少用户在ios和安卓阵营中变动.有不少iphone用户转到安卓阵营,不过其中有个麻烦事就是很多人不知道iphone通讯录应该怎么导出到安卓手机. ...

  8. iPhone通讯录号码不见了怎么恢复

    在玩手机的时候最郁闷的就是手机突然出问题了,比如iPhone通讯录突然丢失了怎么办,电话号码不小心删除了怎么恢复.那么当我们遇到这种问题的时候,怎么能把通讯录中的号码恢复回来呢?今天,小编给大家带来一 ...

  9. 【整理】在Windows系统中编辑管理iPhone通讯录

    [2019年1月24日] [出现问题] 在Windows系统中编辑管理iPhone通讯录? [问题原因] 通讯录太乱了,需要重新整理. [解决方案] 1.手机端,设置在iCloud中保存通讯录. 2. ...

  10. iPhone通讯录如何完整导入到新手机

    概要:iPhone通讯录如何完整导入到新手机?在此部分中,我们将示范几个从iPhone转移通讯录到另一台iPhone的选项.其中,第一种更为推荐,因为更灵活且更容易操作.当然您也可以根据自身情况选择喜 ...

最新文章

  1. 中文NLP的分词真有必要吗?李纪为团队四项任务评测一探究竟 | ACL 2019
  2. 第二阶段冲刺10天 第五天
  3. 我们凭什么相信 5G 很安全?
  4. 多模态语义分析_「CV学霸开讲」卷积神经网络压缩、多模态的语义分析研究
  5. Flume架构以及应用介绍[转]
  6. 最好电脑操作系统_操作系统都有哪些呢
  7. 怎么把竖线去掉_3小时完成一个logo设计,我是怎么做到的?
  8. python语言提供的三个基本数据类型是_python基本数据类型
  9. 远程调用——hessian使用入门
  10. 导出WPS office文档格式的说明
  11. 对称密钥和非对称密钥
  12. 苹果用计算机密码,苹果mac修改用户名与密码的方法 苹果电脑如何修改开机密码...
  13. 初学DSP(1)-TMS320F280049C入门
  14. SQL SERVER 简单介绍
  15. Windows 10 右键 在此处打开 CMD
  16. 淘宝新自动化测试框架AutoRobot简要介绍
  17. python练习---大球吃小球游戏
  18. 利用内网穿透实现无固定IP调试支付回调
  19. 淘宝网及新浪网等几大官方IP查询API接口地址库的调用及使用方法教程
  20. CentOS7安装nVidia驱动以及CUDA,一遍成功

热门文章

  1. Mysql 省市区字典(带层级,带经纬度,带拼音)字典版
  2. 韩顺平java学习day1
  3. 《漫游》之《耽美幻想》
  4. Kent Beck揭秘Facebook开发部署流程
  5. 不能将值 NULL 插入列 'ID',表 列不允许有 Null 值
  6. 中高端时代趁势而来,本就艰难的酒店企业如何顺势而为
  7. 上官婉儿墓志 - 还原历史真相
  8. 2018 百度之星 初赛 第六题 HDU6349
  9. [内附完整源码和文档] 基于VS2013实现的弹弹堂小游戏
  10. 一段java代码_写了一段Java代码,希望大家多多指点