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];
// 保存到联系人对象中,每个属性都对应一个宏,例如:kABPersonFirstNameProper ty
// 设置firstName属性
ABRecordSetValue(person, kABPersonFirstNameProper ty,(CFStringRef)firstName, NULL);
// 设置lastName属性
ABRecordSetValue(person, kABPersonLastNamePropert y, (CFStringRef)lastName, NULL);
// 设置birthday属性
ABRecordSetValue(person, kABPersonBirthdayPropert y,(CFDateRef)birthday, NULL);
// ABMultiValueRef类似是Objective-C中的NSMutableDictionary
ABMultiValueRef mv =ABMultiValueCreateMutabl e(kABMultiStringPropertyTy pe);
// 添加电话号码与其对应的名称内容
for (int i = 0; i < [phones count]; i ++) {
ABMultiValueIdentifier mi = ABMultiValueAddValueAndL abel(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*)ABAddressBookCopyArrayOf AllPeople(addressBook);
  // 遍历所有的联系人并删除(这里只删除姓名为张三的)
  for (id obj in array) {
  ABRecordRef people = (ABRecordRef)obj;
  NSString *firstName = (NSString*)ABRecordCopyValue(people, kABPersonFirstNameProper ty);
  NSString *lastName = (NSString*)ABRecordCopyValue(people, kABPersonLastNamePropert y);
  if ([firstName isEqualToString:@"三"] &&[lastName isEqualToString:@"张"]) {
  ABAddressBookRemoveRecor d(addressBook, people,NULL);
  }
  }
  // 保存修改的通讯录对象
  ABAddressBookSave(addressBook, NULL);
  // 释放通讯录对象的内存
  if (addressBook) {
  CFRelease(addressBook);
  }

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

  + (void)updateAddressBookPersonW ithFirstName:(NSString *)firstName
  lastName:(NSString *)lastName
  mobile:(NSString *)mobile
  nickname:(NSString *)nickname
  birthday:(NSDate *)birthday {
 
  // 初始化并创建通讯录对象,记得释放内存
  ABAddressBookRef addressBook =ABAddressBookCreate();
  // 获取通讯录中所有的联系人
  NSArray *array = (NSArray*)ABAddressBookCopyArrayOf AllPeople(addressBook);
  // 遍历所有的联系人并修改指定的联系人
  for (id obj in array) {
  ABRecordRef people = (ABRecordRef)obj;
  NSString *fn = (NSString*)ABRecordCopyValue(people, kABPersonFirstNameProper ty);
  NSString *ln = (NSString*)ABRecordCopyValue(people, kABPersonLastNamePropert y);
  ABMultiValueRef mv = ABRecordCopyValue(people,kABPersonPhoneProperty);
  NSArray *phones = (NSArray*)ABMultiValueCopyArrayOfA llValues(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,kABPersonNicknamePropert y, (CFStringRef)nickname, NULL);
  }
  if (birthday != nil) {
  ABRecordSetValue(people,kABPersonBirthdayPropert y, (CFDataRef)birthday, NULL);
  }
  }
 
  }
  // 保存修改的通讯录对象
  ABAddressBookSave(addressBook, NULL);
  // 释放通讯录对象的内存
  if (addressBook) {
  CFRelease(addressBook);
  }
 
  }
转自:http://blog.sina.com.cn/s/blog_6f9a971801016pk5.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个简单的通讯录管理程序的示例代码,其使用了结构体和文件读操作: ```c++ #include <iostream> #include <fstream> #include <string> using namespace std; // 定义联系人结构体 struct Contact { string name; string phone; string email; }; // 添加联系人 void addContact(Contact contact, ofstream& contactsFile) { contactsFile << contact.name << "," << contact.phone << "," << contact.email << endl; } // 显示所有联系人 void showContacts(ifstream& contactsFile) { string line; while (getline(contactsFile, line)) { cout << line << endl; } } int main() { // 打开联系人文件 ofstream contactsFile("contacts.txt", ios::app); // 选择操作 int choice; do { cout << "请选择操作:" << endl; cout << "1. 添加联系人" << endl; cout << "2. 显示所有联系人" << endl; cout << "3. 退出" << endl; cin >> choice; switch (choice) { case 1: // 添加联系人 Contact contact; cout << "请输入联系人姓名:"; cin >> contact.name; cout << "请输入联系人电话:"; cin >> contact.phone; cout << "请输入联系人邮箱:"; cin >> contact.email; addContact(contact, contactsFile); break; case 2: // 显示所有联系人 contactsFile.close(); ifstream contactsFile("contacts.txt"); showContacts(contactsFile); contactsFile.close(); break; case 3: // 退出 contactsFile.close(); break; default: cout << "无效操作,请重新选择!" << endl; break; } } while (choice != 3); return 0; } ``` 在上面的代码,我们定义了一个 Contact 结构体来表示一个联系人,其包含了姓名、电话和邮箱三个信息。我们使用了 ofstream 和 ifstream 来分别创建和读取联系人文件,然后通过 addContact 函数来添加联系人,通过 showContacts 函数来显示所有联系人。在主函数,我们使用一个 do-while 循环来不断接受用户的操作并执行相应的操作,直到用户选择退出为止。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值