iOS-----使用AddressBook添加联系人
使用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添加联系人的更多相关文章
- iOS开发--系统通讯录的访问与添加联系人
公司项目有访问通讯录的需求,所以开始了探索之路.从开始的一无所知,到知识的渐渐清晰.这一切要感谢广大无私分享的 “coder”,注:我是尊称的语气! 苹果提供了访问系统通讯录的框架,以便开发者对系统通 ...
- iOS-----使用AddressBook管理联系人
使用AddressBook管理联系人 iPhone手机通常都是自带的Contacts应用,包括所有联系人的性(last name).名(first name).电话.E-mail地址.住址.生日等各种 ...
- iOS 获得通讯录中联系人的所有属性--b
ABAddressBookRef addressBook = ABAddressBookCreate(); CFArrayRef results = ABAddressBookCopyArrayOfA ...
- selenium数据驱动模式实现163邮箱的登录及添加联系人自动化操作
项目结构如下: 要求python3.0 selenium3.0 下面是代码: appModubles:addContactPersonActtion.py和LoginAction.py addCont ...
- iOS-----使用addressBook管理联系人之修改联系人
使用addressBook管理联系人之修改联系人 修改联系人 修改联系人先从底层地址簿中加载一条ABRecordRef记录,然后对这条ABRecordRef记录的属性值进行修改,修改完成后把这条修改后 ...
- Android 调用系统联系人界面的添加联系人,添加已有联系人,编辑和修改。
一.添加联系人 Intent addIntent = new Intent(Intent.ACTION_INSERT,Uri.withAppendedPath(Uri.parse("cont ...
- Android 利用内容提供者添加联系人的操作
上文中<Android 获取系统的联系人>主要介绍了怎样获取系统联系人并实战了一下,本文将介绍如何添加一条联系人信息 添加联系人 1. 添加raw_contacts表,添加一条联系人的id ...
- 使用ContentProvider管理联系人------添加联系人
add.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // 获取程序界面中的三个 ...
- Android利用ContentProviderOperation添加联系人
Android添加联系人有两种方式: 1. 直接调用插入语句,先插入一个空Item,得到一个id,然后给这个id对应的插入其他信息,如姓名,号码,邮件等: 2. 利用ContentProviderOp ...
随机推荐
- mysql性能测试-tpcc
mysql性能测试-tpcc Tpcc-mysql TPC-C是专门针对联机交易处理系统(OLTP系统)的规范 Tpcc-mysql由percona根据规范实现 TPCC流程 更能模拟线上业务 ...
- 20165324_mybash
20165324_mybash 实验要求 实验要求: 使用fork,exec,wait实现mybash 写出伪代码,产品代码和测试代码 发表知识理解,实现过程和问题解决的博客(包含代码托管链接) 背景 ...
- 非线性方程(组):一维非线性方程(二)插值迭代方法 [MATLAB]
一般而言,方程没有能够普遍求解的silver bullet,但是有几类方程的求解方法已经非常清晰确凿了,比如线性方程.二次方程或一次分式.一次方程可以直接通过四则运算反解出答案,二次方程的求根公式也给 ...
- php中的set_magic_quotes_runtime()作用和用法
set_magic_quotes_runtime 用来设置php.ini文件中的magic_quotes_runtime值,当遇到反斜杆(\).单引号(').双引号(")这样一些的字符定入到 ...
- F题:等差区间(RMQ||线段树)
原题大意:原题链接 题解链接 给定一个长为n的数组元素和q次区间[l,r]询问,判断区间[l,r]内元素排序后能否构成等差数列 #include<cmath> #include<c ...
- Linux 笔记 #04# Installing Tomcat 8 on Debian
失败一 ※ 失败二 ※ 失败三 ※ 完 1- 确认机型: root@iZwz:~# lsb_release -a LSB Version: core-2.0-amd64:core-2.0-noarc ...
- zabbix server监控报主机 Lack of free swap space
zabbix server监控报主机 Lack of free swap space,因为交换空间不足引起.该主机内存为3G,正常交换空间大小为物理内存2倍左右. #查看已有内存及交换空间 free ...
- PHP多进程学习(二)__fork起多个子进程,父进程的阻塞与非阻塞
先简单来了解一下多进程 [来初步了解一下PHP多进程及简单demo] php的多进程是不是可以无限制的fork子进程?fork调用的一个奇妙之处就是它仅仅被调用一次,却能够返回两次,它可能有三种不同的 ...
- pytorch 从入门到实战
一.安装 按照 http://pytorch.org 官网上的说明来做,遇到了几个坑.记录如下: 1.用 conda 安装 pytorch 时,下载安装包非常慢,无法忍受. 解决办法:用蓝灯FQ,将蓝 ...
- lnmp升级php
引言 服务器用的是lnmp一键安装包,但是php版本是5.5.项目用的是TP5.1需要php5.6的环境. 好慌! 进行升级操作 进入lnmp安装环境 ./upgrade.sh php 然后输入php ...
