ios 更改通讯录中的信息

问题: 修改通讯录信息时遇到这个问题

Terminating app due to uncaught exception 'CNPropertyNotFetchedException', reason: 'A property was not requested when contact was fetched.'

解决:

// 提取数据

    NSArray * contacts = [store unifiedContactsMatchingPredicate:predicate keysToFetch:@[CNContactGivenNameKey,CNContactImageDataKey,CNContactPhoneNumbersKey,CNContactEmailAddressesKey] error:nil];

想要更改那一个属性,在请求的时候就也要添加上请求的这个条件

注意:

CNMutableContact * contact = [[contacts objectAtIndex:0] mutableCopy]; 

要进行一次深拷贝

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值