iPhone通讯录联系人的增加、删除、修改的操作
2012-07-17 11:32
483 查看
(转 http://blog.csdn.net/lichengliang82421/article/details/6863705)
(个人说明:删除和添加联系人是本人在真机上测试过的。支持一下!!!)
(另:需要操作联系人群组的朋友,可以参考iPhone 添加删除联系人组)
1.需要引入AddressBook.framework框架
2.iPhone通讯录的增加联系人的操作,代码如下(放到项目中可直接运行):
(添加,以上只有单一属性的添加,但是碰见如地址这样的属性,该怎样添加呢,请看下面!)
是不是很简单!
------------------------------------------------------------------------------------------------
3.删除联系人的操作,代码如下(放到项目中可直接运行):
----------------------------------------------------------------------------------------------
4.修改联系人的操作,代码如下(由于项目中使用到了修改联系人的操作,所以将方法直接复制过来了):
// 根据姓氏、名字以及手机号码修改联系人的昵称和生日
(个人说明:删除和添加联系人是本人在真机上测试过的。支持一下!!!)
(另:需要操作联系人群组的朋友,可以参考iPhone 添加删除联系人组)
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)[labels objectAtIndex:i], &mi); } // 设置phone属性 ABRecordSetValue(person, kABPersonPhoneProperty, mv, NULL); // 释放该数组 if (mv) { CFRelease(mv); } // 将新建的联系人添加到通讯录中 ABAddressBookAddRecord(addressBook, person, NULL); // 保存通讯录数据 ABAddressBookSave(addressBook, NULL); // 释放通讯录对象的引用 if (addressBook) { CFRelease(addressBook); }
(添加,以上只有单一属性的添加,但是碰见如地址这样的属性,该怎样添加呢,请看下面!)
ABAddressBookRef iPhoneAddressBook = ABAddressBookCreate(); ABRecordRef newPerson = ABPersonCreate(); CFErrorRef error = NULL; //address ABMutableMultiValueRef multiAddress = ABMultiValueCreateMutable(kABMultiDictionaryPropertyType); NSMutableDictionary *addressDictionary = [[NSMutableDictionary alloc] init]; //Street [addressDictionary setObject:@"750 North Orleans Street, Ste 601" forKey:(NSString *) kABPersonAddressStreetKey]; //City [addressDictionary setObject:@"Chicago" forKey:(NSString *)kABPersonAddressCityKey]; //State [addressDictionary setObject:@"IL" forKey:(NSString *)kABPersonAddressStateKey]; //Zip [addressDictionary setObject:@"60654" forKey:(NSString *)kABPersonAddressZIPKey]; //label ABMultiValueAddValueAndLabel(multiAddress, addressDictionary, kABWorkLabel, NULL); ABRecordSetValue(newPerson, kABPersonAddressProperty, multiAddress,&error); CFRelease(multiAddress);
是不是很简单!
------------------------------------------------------------------------------------------------
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 && [firstName length] == 0) || ([fn isEqualToString:firstName]); // lastName同时为空或者lastName相等 BOOL lf = ([ln length] == 0 && [lastName length] == 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); } }
相关文章推荐
- iPhone通讯录联系人的增加、删除、修改的操作
- Oracle的列操作(增加列,修改列,删除列),包括操作多列
- Swift - 添加、修改、删除通讯录联系人
- ASP.NET中数据库的操作初步----增加、删除、修改
- Swift - 使用Contacts访问通讯录2(添加、修改、删除联系人)
- ASP.NET MVC3 实例(六) 增加、修改和删除操作(一)
- ASP.NET MVC3 实例(六) 增加、修改和删除操作(一)
- 拖拽自动生成的DataGridView和BindingSource操作数据库(增加,修改,删除)---自己实现
- jquery easyui实现datagrid表格向数据库中进行增加,修改和删除操作
- vb.net操作注册表的方法分析【增加,修改,删除,查询】
- C#使用XmlDocument操作XML进行查询、增加、修改、删除、保存应用的实例
- ASP.NET中数据库的操作初步----增加、删除、修改
- ASP.NET 操作session详解 增加,修改,删除
- 操作Hibernate类大致有增加,删除,修改及检查四种,简称为增删改查
- tinyxml使用:创建XML,遍历打印xml文件 select操作,获取单个节点值,删除节点操作,修改节点操作,增加节点操作
- ASP.NET MVC3 实例(六) 增加、修改和删除操作(一)
- ASP.NET MVC3 实例(六) 增加、修改和删除操作(二)
- hibernate增加,删除,修改,查找操作
- ASP.NET MVC3 实例(六) 增加、修改和删除操作(二)
- Oracle的列操作(增加列,修改列,删除列),包括操作多列