2012-01-12 95 views
2

我试图将电话号码添加到使用地址簿框架中现有的联系人,与选择器调用此方法,选择人员后:添加电话号码,以现有联系人

- (BOOL) peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person 
{ 
    if(_phoneNumber != nil) 
    { 
     ABMutableMultiValueRef multiPhone = ABMultiValueCreateMutableCopy (ABRecordCopyValue(person, kABPersonPhoneProperty)); 
     ABMultiValueAddValueAndLabel(multiPhone, (__bridge CFTypeRef)_phoneNumber, kABPersonPhoneOtherFAXLabel, NULL); 
     ABRecordSetValue(person, kABPersonPhoneProperty, multiPhone,nil); 
     CFRelease(multiPhone); 
    } 

    return FALSE; 
} 

但在此之后的数不会添加到该人的记录中。我究竟做错了什么?

+0

不得不等待22小时奖励赏金,还有3个小时。 – Thys 2012-01-18 08:30:20

+0

好的,不记得了。 Ty :) – Geoffroy 2012-01-18 12:58:11

回答

4

您需要将此记录保存到地址簿。

使用ABPeoplePickerNavigationControlleraddressBook属性获取地址簿,然后致电ABAddressBookSave

这给了你这样的:

- (BOOL) peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person 
{ 
    if(_phoneNumber != nil) 
    { 
     ABMutableMultiValueRef multiPhone = ABMultiValueCreateMutableCopy (ABRecordCopyValue(person, kABPersonPhoneProperty)); 
     ABMultiValueAddValueAndLabel(multiPhone, (__bridge CFTypeRef)_phoneNumber, kABPersonPhoneOtherFAXLabel, NULL); 
     ABRecordSetValue(person, kABPersonPhoneProperty, multiPhone,nil); 

     ABAddressBookRef ab = peoplePicker.addressBook; 
     CFErrorRef* error = NULL; 
     ABAddressBookSave(ab, error); 
     CFRelease(multiPhone); 
    } 

    return FALSE; 
} 

可以测试成功/失败ABAddressBookSave返回值,并在error可变获得更多的信息。

相关问题