ios - 如何编辑 ABAddressBook 上的记录

标签 ios objective-c abaddressbook

我希望能够从 ABPeoplePickerNavigationController 中选择一条记录,然后从我的 View Controller 中向该联系人添加一封电子邮件。

我试图搜索 ABAddressBook 类引用以了解我能做什么,但一无所获 =/

我被人员引用困在这里,有人知道如何继续吗?

- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person

我在使用 ABRecordSetValue(person, kABPersonEmailProperty, (__bridge CFStringRef)@"a@a.com", &error); 时出现 EXC_BAD_ACCESS,但没有日志错误。

更新

好的,我设法将它保存在 peoplePicker 委托(delegate)中,如下所示:

- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person {

    ...

    self.addressBook = peoplePicker.addressBook;
    self.selectedPerson = person;

    // adding to native contacts
    CFErrorRef error = nil;
    ABMutableMultiValueRef emailMultiValue = ABMultiValueCreateMutable(kABPersonEmailProperty);
    bool didAddEmail = ABMultiValueAddValueAndLabel(emailMultiValue, (__bridge CFTypeRef)(email), kABOtherLabel, NULL);
    if(didAddEmail){
        ABRecordSetValue(self.selectedPerson, kABPersonEmailProperty, emailMultiValue, nil);
        NSLog(@"Email saved......");
    } else {
        NSLog(@"Error adding email: %@", error);
    }
    ABAddressBookSave(self.addressBook, NULL);

    ...
}

奇怪的是,如果我尝试在该方法之外执行此操作,例如在用户在文本字段上输入之后,我会收到错误消息。

然后在上面的 peoplePickerNavigationController 方法内部和外部检查我的日志:

(lldb) po self.selectedPerson
(ABRecordRef) $1 = 0x0a1838f0 <CPRecord: 0xa1838f0 ABPerson>
(lldb) po self.selectedPerson
(ABRecordRef) $4 = 0x0a1838f0 [no Objective-C description available]

第一个日志似乎没问题,因为它是在委托(delegate)方法内部完成的,但第二个很奇怪,我的意思是内存引用在那里但内容不存在......第二个是在 peoplePicker 被解散后记录的...

为什么会这样?

我的 .h 文件:

@property (nonatomic) ABAddressBookRef addressBook;
@property (nonatomic) ABRecordRef selectedPerson;

最佳答案

我的解决方案是保存人员 ID,然后再次访问地址簿并使用: ABAddressBookGetPersonWithRecordID(地址簿, self.selectedPersonID)

然后重新创建地址簿。

ABAddressBookRef addressBook = ABAddressBookCreate();

关于ios - 如何编辑 ABAddressBook 上的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14319615/

相关文章:

iphone - 如何在uiwebview中使颜色清晰

iOS 为库编写单元测试

ios - 访问用户地址簿的权限警报不会停止执行

objective-c - 自定义 iOS 通讯录。需要有关数据结构和性能的建议

ios - iOS kABPersonModificationDateProperty 的奇怪行为,似乎一直在更新

ios - Objective-c 中静态变量和非静态变量的范围区别

两个库的 iOS 远程通知 swizzler 无限循环

objective-c - 从URL提取图像

ios swift 隐藏由NavigationViewController创建的UINavigationBar

ios - 基于单个对象键对 NSDictionary 进行排序