iOS使用CNContact对通讯录增删改查

#import <ContactsUI/ContactsUI.h>

 新增联系人 

CNMutableContact * contact = [[CNMutableContact alloc] init];
// 头像
contact.imageData = UIImagePNGRepresentation([UIImage imageNamed:@"avatar"]);
// 设置名字
contact.givenName = @"三";
// 设置姓氏
contact.familyName = @"张";
// 邮箱
CNLabeledValue *homeEmail = [CNLabeledValue labeledValueWithLabel:CNLabelHome value:@"hello@163.com"];
CNLabeledValue *workEmail = [CNLabeledValue labeledValueWithLabel:CNLabelWork value:@"world@163.com"];
contact.emailAddresses = @[homeEmail,workEmail];
// 手机号
contact.phoneNumbers = @[[CNLabeledValue labeledValueWithLabel:CNLabelPhoneNumberiPhone value:[CNPhoneNumber phoneNumberWithStringValue:@"12344445555"]]];
// 地址
CNMutablePostalAddress *homeAdress = [[CNMutablePostalAddress alloc] init];
homeAdress.street = @"贝克街";
homeAdress.city = @"伦敦";
homeAdress.state = @"英国";
homeAdress.postalCode = @"221B";
contact.postalAddresses = @[[CNLabeledValue labeledValueWithLabel:CNLabelHome value:homeAdress]];
// 生日
NSDateComponents *birthday = [[NSDateComponents alloc] init];
birthday.day = 7;
birthday.month = 5;
birthday.year = 1992;
contact.birthday = birthday;

// 初始化方法
CNSaveRequest *saveRequest = [[CNSaveRequest alloc] init];
// 添加联系人
[saveRequest addContact:contact toContainerWithIdentifier:nil];
// 写入
CNContactStore *store = [[CNContactStore alloc] init];
[store executeSaveRequest:saveRequest error:nil];

//家庭
CONTACTS_EXTERN NSString * const CNLabelHome                             NS_AVAILABLE(10_11, 9_0);
//工作
CONTACTS_EXTERN NSString * const CNLabelWork                             NS_AVAILABLE(10_11, 9_0);
//学校
CONTACTS_EXTERN NSString * const CNLabelSchool                             NS_AVAILABLE(10_15, 13_0);
//其他
CONTACTS_EXTERN NSString * const CNLabelOther                            NS_AVAILABLE(10_11, 9_0);
// 邮箱地址
CONTACTS_EXTERN NSString * const CNLabelEmailiCloud                      NS_AVAILABLE(10_11, 9_0);
// url地址
CONTACTS_EXTERN NSString * const CNLabelURLAddressHomePage               NS_AVAILABLE(10_11, 9_0);
// 日期
CONTACTS_EXTERN NSString * const CNLabelDateAnniversary                  NS_AVAILABLE(10_11, 9_0);

删除联系人

CNContactStore *store = [[CNContactStore alloc] init];
//检索条件,检索所有名字中FamilyName包含A的联系人
NSPredicate *predicate = [CNContact predicateForContactsMatchingName:@"A"];
//提取数据
NSArray *contacts = [store unifiedContactsMatchingPredicate:predicate keysToFetch:@[CNContactFamilyNameKey] error:nil];

CNSaveRequest *saveRequest = [[CNSaveRequest alloc] init];
for (CNContact *contact in contacts) {
    CNMutableContact *contact1 = [contact mutableCopy];
    // 删除联系人
    [saveRequest deleteContact:contact1];
}
[store executeSaveRequest:saveRequest error:nil];

修改联系人

CNContactStore * store = [[CNContactStore alloc] init];
//检索条件,检索所有名字中有A的联系人
NSPredicate * predicate = [CNContact predicateForContactsMatchingName:@"A"];
//提取数据,要修改的必需先提取出来,放在keysToFetch中提取
NSArray * contacts = [store unifiedContactsMatchingPredicate:predicate keysToFetch:@[CNContactGivenNameKey] error:nil];

CNSaveRequest * saveRequest = [[CNSaveRequest alloc] init];
for (CNContact *contact in contacts) {
    CNMutableContact *contact1 = [contact mutableCopy];
    // 编辑联系人
    contact1.givenName = @"B";
    [saveRequest updateContact:contact1];
}
[store executeSaveRequest:saveRequest error:nil];

读取联系人

NSMutableArray *array = [NSMutableArray array];
// 获取授权状态
CNAuthorizationStatus status = [CNContactStore authorizationStatusForEntityType:CNEntityTypeContacts];
// 判断授权状态,如果不是已经授权,则直接返回
if (status != CNAuthorizationStatusAuthorized) {
    return nil;
}

// 创建通信录对象
CNContactStore *store = [[CNContactStore alloc] init];

// 创建获取通信录的请求对象
// 拿到所有打算获取的属性对应的key
NSArray *keys = @[CNContactGivenNameKey, CNContactFamilyNameKey, CNContactPhoneNumbersKey, CNContactImageDataKey];

// 创建CNContactFetchRequest对象
CNContactFetchRequest *request = [[CNContactFetchRequest alloc] initWithKeysToFetch:keys];

// 遍历所有的联系人
[store enumerateContactsWithFetchRequest:request error:nil usingBlock:^(CNContact * _Nonnull contact, BOOL * _Nonnull stop) {
    [array addObject:contact];
}];

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的 iOS 通讯录修改备注的代码实现示例: ```obj-c // 获取联系人信息并修改备注 - (void)updateContactRemarkWithName:(NSString *)name remark:(NSString *)remark { // 创建联系人名称搜索谓词 NSPredicate *predicate = [CNContact predicateForContactsMatchingName:name]; // 创建联系人信息请求对象 NSArray *keysToFetch = @[CNContactGivenNameKey, CNContactFamilyNameKey, CNContactMiddleNameKey, CNContactNicknameKey, CNContactPhoneNumbersKey, CNContactIdentifierKey]; CNContactFetchRequest *fetchRequest = [[CNContactFetchRequest alloc] initWithKeysToFetch:keysToFetch]; fetchRequest.predicate = predicate; NSError *error; CNContactStore *store = [[CNContactStore alloc] init]; // 遍历符合条件的联系人 [store enumerateContactsWithFetchRequest:fetchRequest error:&error usingBlock:^(CNContact * _Nonnull contact, BOOL * _Nonnull stop) { // 创建可变联系人对象 CNMutableContact *mutableContact = [contact mutableCopy]; // 设置备注信息 mutableContact.note = remark; // 保存修改后的联系人信息 CNSaveRequest *request = [[CNSaveRequest alloc] init]; [request updateContact:mutableContact]; [store executeSaveRequest:request error:nil]; }]; } // 更新好友备注信息 - (void)updateFriendRemarkWithContact:(CNContact *)contact { // 获取好友列表中的好友信息 NSString *friendId = [self getFriendIdByContactId:contact.identifier]; if (friendId) { // 调用即时通讯 SDK 的接口更新好友备注信息 [self updateFriendRemarkWithFriendId:friendId remark:contact.note]; } } ``` 在这个示例中,我们首先根据姓名搜索联系人信息,然后遍历符合条件的联系人,创建可变联系人对象,并设置备注信息。最后通过 CNSaveRequest 和 CNContactStore 的 executeSaveRequest 方法保存修改后的联系人信息。 在更新好友备注信息时,我们需要根据联系人的唯一标识符获取到好友的唯一标识符,然后调用第三方即时通讯 SDK 的接口更新好友备注信息。 需要注意的是,这个示例中的代码只是一个简单的实现,具体实现方式需要根据具体的业务需求进行调整。同时,在实现中还需要考虑到错误处理和用户授权等问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值