使用AddressBook添加联系人

添加联系人的步骤如下:

1

创建ABAddressBookRef,这就得到了对地址簿的引用。

2

调用ABPersonCreate()函数创建一个空的ABRecordRef,得到一条空的联系人记录

3

根据需要为ABRecordRef设置属性值。

只设置姓氏、名字等简单信息,则直接调用ABRecordSetValue()函数为ABRecordRef的指定属性设置属性值即可.

设置电话号码、电子邮件等可以指定label的属性,需要先创建一个ABMutableMultiValueRef,

然后调用ABMultiValueAddValueAndLabel()函数向ABMutableMultiValueRef中添加多个值,最后才能调用ABRecordSetValue()函数为ABRecordRef的指定属性设置属性值.

4

调用ABAddressBookAddRecord()函数将指定ABRecordRef记录添加到地址簿中.

5

调用ABAddressBookSave()函数将删除操作保存到底层地址簿中.

代码片段

// 特此说明用的main. storyboard

@implementation ViewController

- (void)viewDidLoad

{

  [super viewDidLoad];

}

- (IBAction)add:(id)sender

{

// 名

  NSString *firstName = self.firstnameField.text;

  // 姓

  NSString *lastName = self.lastnameField.text;

  NSString *homePhone = self.homePhoneField.text;// 座机

  NSString* mobilePhone = self.mobilePhoneField.text :// 手机

NSString* workMail = self.workMailField.text ;

NSString* privateMail = self. privateMailField.text ;

NSString* country = self.countryField.text ;

NSString* state = self. stateField.text ;

CFErrorRef error = nil;

// 创建ABAddressBook,该函数的第1个参数暂时并未使用,直接传入NULL即可.

ABAddressBookRef  ab = ABAddressBookCreateWithOptions(NULL, &error);

if(!error)

{

  // 请求访问用户地址簿

ABAddressBookAccessWithCompletion(ab, ^(bool  granted, CFErrorRef  error)

{

  // 如果用户允许访问地址簿

if(granted)

{

// 创建一条新的记录

ABRecordRef  rec = ABPersonCreate();

// 为rec的kABPersonFirstNameProperty(名字)属性设置值

ABRecordSetValue(rec, kABPersonFirstNameProperty, (__bridge CFStringRef)firstName, NULL);

// 为rec的kABPresonLastNameProperty(姓氏)属性设置值

ABRecordSetValue(rec, kABPersonLastNameProperty, (__bridge CFStringRef)lastName, NULL);

// 创建ABMutableMultiValueRef来管理多个电话号码

ABMutableMultiValueRef  phoneValue = ABMultiValueCreateMutable(kABPersonPhoneProperty);

// 为家庭的电话号码添加label

ABMultiValueAddValueAndLabel(phoneValue , (__bridge  CFTypeRef)homePhone),  kABHomeLabel,  NULL);

// 为移动的电话号码添加label

ABMultiValueAddValueAndLabel(phoneValue , (__bridge  CFTypeRef)mobilePhone),  kABPersonPhoneMobileLabel,  NULL);

     // 为rec的kABPersonPhoneProperty(电话)属性设置值

ABRecordSetValue(rec, kABPersonPhoneProperty,  phoneValue, NULL);

// 创建ABMutableMultiValueRef来管理多个电子邮件

ABMutableMultiValueRef  mailValue = ABMultiValueCreateMutable(kABPersonEmailProperty);

// 为工作的电子邮件添加label

ABMultiValueAddValueAndLabel(mailValue , (__bridge  CFStringRef)workMail,   (__bridge  CFStringRef)@”工作”,  NULL);

// 为私人的电子邮件添加label

ABMultiValueAddValueAndLabel(mailValue , (__bridge  CFStringRef)privateMail,   (__bridge  CFStringRef)@”私人”,  NULL);

// 为rec的kABPersonEmailProperty(电子邮件)属性设置值

ABRecordSetValue(rec, kABPersonMailProperty,  mailValue, NULL);

// 创建ABMutableMultiValueRef来管理多个地址

ABMutableMultiValueRef addrValue = ABMultiValueCreateMutable(kABPersonAddressProperty);

// 创建一条新的ABRecordRef记录,这条记录不包含任何属性

NSDictionary *addrDict = [NSDictionary dictionaryWithObjectsAndKeys:country, kABPersonAddressCountryKey,  state, kABPersonAddressStateKey, nil];

// 为住址的地址添加label

ABMultiValueAddValueAndLabel(addrValue, (__bridge CFTypeRef)addrDict, (__bridge CFStringRef)@”地址”,  NULL);

//  为rec的kABPersonAddressProperty(地址)属性设置值

ABRecordSetValue(rec, kABPersonAddressProperty, addrValue, NULL);

BOOL result = ABAddressBookAddRecord(ab,  rec,  NULL);

   if(result)

   {

      // 将程序所做的修改保存到地址簿中,如果保存成功

      if(ABAddressBookSave(ab, NULL))

     {

       [self showAlert:@”成功添加新的联系人”];

     }

     else

    {

       [self showAlert:@”添加失败”];

     }

    }

   }

 })

}

- (IBAction)finishEdit:(id)sender

{

    [sender  resignFirstResponder];

}

- (void)showAlert:(NSString *)msg

{

   // 使用UIAlertView显示msg信息

  [ [ [UIAlertView alloc]  initWithTitle:@” 提 示 ”

                                 message:msg

                                delegate:nil

                         cancelButtonTitle:@”确定”

                         otherButtonTitles:nil] show ];

}

@end

// 注释:因为iOS系统要求地址必须是{国家:国家值, 省份:省份值, 城市:城市值}这种NSDictionary对象,所以创建了一个NSDictionary对象作为地址值

效果图

iOS-----使用AddressBook添加联系人的更多相关文章

  1. iOS开发--系统通讯录的访问与添加联系人

    公司项目有访问通讯录的需求,所以开始了探索之路.从开始的一无所知,到知识的渐渐清晰.这一切要感谢广大无私分享的 “coder”,注:我是尊称的语气! 苹果提供了访问系统通讯录的框架,以便开发者对系统通 ...

  2. iOS-----使用AddressBook管理联系人

    使用AddressBook管理联系人 iPhone手机通常都是自带的Contacts应用,包括所有联系人的性(last name).名(first name).电话.E-mail地址.住址.生日等各种 ...

  3. iOS 获得通讯录中联系人的所有属性--b

    ABAddressBookRef addressBook = ABAddressBookCreate(); CFArrayRef results = ABAddressBookCopyArrayOfA ...

  4. selenium数据驱动模式实现163邮箱的登录及添加联系人自动化操作

    项目结构如下: 要求python3.0 selenium3.0 下面是代码: appModubles:addContactPersonActtion.py和LoginAction.py addCont ...

  5. iOS-----使用addressBook管理联系人之修改联系人

    使用addressBook管理联系人之修改联系人 修改联系人 修改联系人先从底层地址簿中加载一条ABRecordRef记录,然后对这条ABRecordRef记录的属性值进行修改,修改完成后把这条修改后 ...

  6. Android 调用系统联系人界面的添加联系人,添加已有联系人,编辑和修改。

    一.添加联系人 Intent addIntent = new Intent(Intent.ACTION_INSERT,Uri.withAppendedPath(Uri.parse("cont ...

  7. Android 利用内容提供者添加联系人的操作

    上文中<Android 获取系统的联系人>主要介绍了怎样获取系统联系人并实战了一下,本文将介绍如何添加一条联系人信息 添加联系人 1. 添加raw_contacts表,添加一条联系人的id ...

  8. 使用ContentProvider管理联系人------添加联系人

    add.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // 获取程序界面中的三个 ...

  9. Android利用ContentProviderOperation添加联系人

    Android添加联系人有两种方式: 1. 直接调用插入语句,先插入一个空Item,得到一个id,然后给这个id对应的插入其他信息,如姓名,号码,邮件等: 2. 利用ContentProviderOp ...

随机推荐

  1. Python实现支付宝在线支付

    windows系统安装Python虚拟环境 首先保证你的系统已经安装好了Python 安装virtualenv C:\WINDOWS\system32>pip3 install virtuale ...

  2. OA项目_环境搭建

    OA项目现在要做成微服务,用的框架是springboot,所用的编程工具是idea,maven,做为一个程序员最关心的就是我需要在那个架包中编写代码,我们只需关注domain,repository,s ...

  3. 关于Conversion to Dalvik format failed with error 1错误

    在用Android导入一个新项目时,不知道为啥就碰上这个错误.在网上搜了半天,发现各种办法都有,但是最后居然是:将一个项目下的文件夹libs作为了source folder,而又在Proporties ...

  4. QT+VS中ui不能声明为指针?

    问题描述:QtCreator里的UI全是默认为指针类型,调用的时候[ui->]但是使用VS+Qt来,发来默认的是变量类型,使用的时候[ui.] 统一:为了统一我把后者声明改为前者 问题:在mai ...

  5. ubuntu16.04+七彩虹GTX1060的NVIDIA驱动+Cuda8.0+cudnn5.1+tensorflow+keras搭建深度学习环境【学习笔记】【原创】

    平台信息:PC:ubuntu16.04.i5.七彩虹GTX1060显卡 作者:庄泽彬(欢迎转载,请注明作者) 说明:参考了网上的一堆的资料搭建了深度学习的开发环境,下班在宿舍折腾了好几个晚上才搞定,写 ...

  6. sqlite中的时间

    插入时间的sql语句 ','-61') 时间格式'2014-11-17T19:37:32' 年月日和时分秒之间多了一个字母T,保存到数据库的时候,会自动给时间加8个小时. 保存的结果为2014-11- ...

  7. Python学习札记(三十四) 面向对象编程 Object Oriented Program 5

    参考:获取对象信息 NOTE 1.type()函数可以用来判断对象的类型: >>> type(123) <class 'int'> >>> type(' ...

  8. Android -- service的开启方式, start开启和绑定开启服务,调用服务的的方法, aidl调用远程服务

    1. 概述 bindService() 绑定服务  可以得到服务的代理人对象,间接调用服务里面的方法. 绑定服务: 间接调用服务里面的方法.           如果调用者activity被销毁了, ...

  9. C#中标准Dispose模式的实现(转载)

    需要明确一下C#程序(或者说.NET)中的资源.简单的说来,C#中的每一个类型都代表一种资源,而资源又分为两类: 托管资源:由CLR管理分配和释放的资源,即由CLR里new出来的对象: 非托管资源:w ...

  10. shell 按行读取文件

    #!/bin/bash count= //赋值语句,不加空格 cat test | while read line //cat 命令的输出作为read命令的输入,read读到的值放在line中 do ...