iOS 通讯录修改操作

1.需要引入AddressBook.framework框架
2.iPhone通讯录的增加联系人的操作,代码如下(放到项目中可直接运行):

// 初始化一个ABAddressBookRef对象,使用完之后需要进行释放,
// 这里使用CFRelease进行释放
// 相当于通讯录的一个引用
ABAddressBookRef addressBook = ABAddressBookCreate();
// 新建一个联系人
// ABRecordRef是一个属性的集合,相当于通讯录中联系人的对象
// 联系人对象的属性分为两种:
// 只拥有唯一值的属性和多值的属性。
// 唯一值的属性包括:姓氏、名字、生日等。
// 多值的属性包括:电话号码、邮箱等。
ABRecordRef person = ABPersonCreate();
NSString *firstName = @"四";
NSString *lastName = @"李";
NSDate *birthday = [NSDate date];
// 电话号码数组
NSArray *phones = [NSArray arrayWithObjects:@"123",@"456",nil];
// 电话号码对应的名称
NSArray *labels = [NSArray arrayWithObjects:@"iphone",@"home",nil];
// 保存到联系人对象中,每个属性都对应一个宏,例如:kABPersonFirstNameProperty
// 设置firstName属性
ABRecordSetValue(person, kABPersonFirstNameProperty,(CFStringRef)firstName, NULL);
// 设置lastName属性
ABRecordSetValue(person, kABPersonLastNameProperty, (CFStringRef)lastName, NULL);
// 设置birthday属性
ABRecordSetValue(person, kABPersonBirthdayProperty,(CFDateRef)birthday, NULL);
// ABMultiValueRef类似是Objective-C中的NSMutableDictionary
ABMultiValueRef mv =ABMultiValueCreateMutable(kABMultiStringPropertyType);
// 添加电话号码与其对应的名称内容
for (int i = 0; i < [phones count]; i ++) {
ABMultiValueIdentifier mi = ABMultiValueAddValueAndLabel(mv,(CFStringRef)[phones objectAtIndex:i], (CFStringRef)[labelsobjectAtIndex:i], &mi);
}
// 设置phone属性
ABRecordSetValue(person, kABPersonPhoneProperty, mv, NULL);
// 释放该数组
if (mv) {
CFRelease(mv);
}
// 将新建的联系人添加到通讯录中
ABAddressBookAddRecord(addressBook, person, NULL);
// 保存通讯录数据
ABAddressBookSave(addressBook, NULL);
// 释放通讯录对象的引用
if (addressBook) {
CFRelease(addressBook);
}

------------------------------------------------------------------------------------------------
3.删除联系人的操作,代码如下(放到项目中可直接运行):

 // 初始化并创建通讯录对象,记得释放内存
 ABAddressBookRef addressBook =ABAddressBookCreate();
 // 获取通讯录中所有的联系人
 NSArray *array = (NSArray*)ABAddressBookCopyArrayOfAllPeople(addressBook);
 // 遍历所有的联系人并删除(这里只删除姓名为张三的)
 for (id obj in array) {
 ABRecordRef people = (ABRecordRef)obj;
 NSString *firstName = (NSString*)ABRecordCopyValue(people, kABPersonFirstNameProperty);
 NSString *lastName = (NSString*)ABRecordCopyValue(people, kABPersonLastNameProperty);
 if ([firstName isEqualToString:@"三"] &&[lastName isEqualToString:@"张"]) {
 ABAddressBookRemoveRecord(addressBook, people,NULL);
 }
 }
 // 保存修改的通讯录对象
 ABAddressBookSave(addressBook, NULL);
 // 释放通讯录对象的内存
 if (addressBook) {
 CFRelease(addressBook);
 }

----------------------------------------------------------------------------------------------
4.修改联系人的操作,代码如下(由于项目中使用到了修改联系人的操作,所以将方法直接复制过来了):
// 根据姓氏、名字以及手机号码修改联系人的昵称和生日

 + (void)updateAddressBookPersonWithFirstName:(NSString *)firstName
 lastName:(NSString *)lastName
 mobile:(NSString *)mobile
 nickname:(NSString *)nickname
 birthday:(NSDate *)birthday {
 
 // 初始化并创建通讯录对象,记得释放内存
 ABAddressBookRef addressBook =ABAddressBookCreate();
 // 获取通讯录中所有的联系人
 NSArray *array = (NSArray*)ABAddressBookCopyArrayOfAllPeople(addressBook);
 // 遍历所有的联系人并修改指定的联系人
 for (id obj in array) {
 ABRecordRef people = (ABRecordRef)obj;
 NSString *fn = (NSString*)ABRecordCopyValue(people, kABPersonFirstNameProperty);
 NSString *ln = (NSString*)ABRecordCopyValue(people, kABPersonLastNameProperty);
 ABMultiValueRef mv = ABRecordCopyValue(people,kABPersonPhoneProperty);
 NSArray *phones = (NSArray*)ABMultiValueCopyArrayOfAllValues(mv);
 // firstName同时为空或者firstName相等
 BOOL ff = ([fn length] == 0 && [firstNamelength] == 0) || ([fn isEqualToString:firstName]);
 // lastName同时为空或者lastName相等
 BOOL lf = ([ln length] == 0 && [lastNamelength] == 0) || ([ln isEqualToString:lastName]);
 // 由于获得到的电话号码不符合标准,所以要先将其格式化再比较是否存在
 BOOL is = NO;
 for (NSString *p in phones) {
 //红色代码处,我添加了一个类别(给NSString扩展了一个方法),该类别的这个方法主要是用于将电话号码中的"("、")"、""、"-"过滤掉
 if ([[p iPhoneStandardFormat]isEqualToString:mobile]) {
 is = YES;
 break;
 }
 }
 // firstName、lastName、mobile 同时存在进行修改
 if (ff && lf && is) {
 if ([nickname length] > 0) {
 ABRecordSetValue(people,kABPersonNicknameProperty, (CFStringRef)nickname, NULL);
 }
 if (birthday != nil) {
 ABRecordSetValue(people,kABPersonBirthdayProperty, (CFDataRef)birthday, NULL);
 }
 }
 
 }
 // 保存修改的通讯录对象
 ABAddressBookSave(addressBook, NULL);
 // 释放通讯录对象的内存
 if (addressBook) {
 CFRelease(addressBook);
 }
 
 }
转自:http://blog.sina.com.cn/s/blog_6f9a971801016pk5.html
资源下载链接为: https://pan.quark.cn/s/1bfadf00ae14 在 Linux 系统中,查找域名或主机名对应的 IP 地址是网络管理中的一项基础且关键任务,对于排查网络故障、调试网络问题以及监控网络服务是否正常运行等场景都非常重要。本文将介绍五种在 Linux 终端查询域名 IP 地址的方法。 首先,dig 命令(全称 Domain Information Groper)是一个功能强大的 DNS 查询工具,能够向 DNS 服务器发送查询请求并获取详细的响应信息。如果需要查询单个域名的 IP 地址,可以使用命令 dig 2daygeek.com +short 。此外,还可以通过编写 bash 脚本,将包含域名的文本文件中的域名逐个读取,然后利用 dig 命令进行查询,从而实现批量查询域名 IP 地址的功能。 其次,host 命令是一个简单易用的 DNS 查询工具,主要用于将域名解析为 IP 地址。要获取某个域名的 IP 地址,直接使用 host 2daygeek.com 即可。如果只想显示 IP 地址部分,可以通过管道结合 grep 和 sed 命令来实现,例如:host 2daygeek.com | grep "has address" | sed s/has address/-/g 。 再者,nslookup 命令也是一种常用的 DNS 查询工具,它支持交互式查询 DNS 信息。通过 nslookup 2daygeek.com 可以查询域名的 IP 地址。若要以非交互式的方式只显示 IP 地址,可以使用命令 nslookup 2daygeek.com | awk /^Address:/ {print $2} 。 另外,fping 命令与传统的 ping 命令不同,它不会直接进行 DNS 查询,而是通过发送 ICMP Echo Request(pi
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值