2012-01-12 52 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可變獲得更多的信息。

相關問題