我希望能够从ABPeoplePickerNavigationController中选择一条记录,然后从我的视图控制器中向该联系人添加电子邮件。

我试图在ABAddressBook类引用上进行搜索,以查看我可以做什么,但没有见解= /

我被此人参考卡住了,有人知道继续的方法吗?

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

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

更新

好的,我设法将其保存在peoplePicker委托中,如下所示:
- (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);

    ...
}

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

然后在上述peoplePickerNavigationController方法的内部和外部检查我的日志:
(lldb) po self.selectedPerson
(ABRecordRef) $1 = 0x0a1838f0 <CPRecord: 0xa1838f0 ABPerson>
(lldb) po self.selectedPerson
(ABRecordRef) $4 = 0x0a1838f0 [no Objective-C description available]

第一个日志似乎没问题,因为它是在委托方法中完成的,但是第二个日志很奇怪,我的意思是内存引用存在但没有内容...第二个日志是在PeoplePicker被解雇之后记录的。

为什么会这样呢?

我的.h文件:
@property (nonatomic) ABAddressBookRef addressBook;
@property (nonatomic) ABRecordRef selectedPerson;

最佳答案

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

ABAddressBookRef addressBook = ABAddressBookCreate();

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

10-09 08:07
查看更多