2011-11-17 56 views
1

我有一個Contact對象(我寫的一個類),用於創建新的AddressBook人員。這是我的代碼:使用NSString更新kABPersonPhoneProperty添加電話號碼

+ (ABRecordRef)createABPersonFromContact:(Contact*)contact 
{ 
    ABRecordRef person = ABPersonCreate(); 

    ABRecordSetValue(person, kABPersonFirstNameProperty, contact.firstName, NULL); 
    ABRecordSetValue(person, kABPersonLastNameProperty, contact.lastName, NULL); 
    ABRecordSetValue(person, kABPersonOrganizationProperty, contact.company, NULL); 

    CFStringRef phoneNumberValue = (CFStringRef)contact.phoneNumber.value; 
    CFStringRef phoneNumberLabel = (CFStringRef)contact.phoneNumber.label; 

    ABMutableMultiValueRef phoneNumber = ABMultiValueCreateMutable(kABPersonPhoneProperty); 

    ABMultiValueAddValueAndLabel(phoneNumber, value, label, NULL); 
    ABRecordSetValue(person, kABPersonPhoneProperty, phoneNumber, NULL); 
    CFRelease(phoneNumber); 

    return person; 
} 

contact.phoneNumber.value是格式爲「555-555-5555」的NSString。當我運行代碼並顯示帶有此方法返回的ABRecordRef的ABPersonViewController時,每件事情都能正確顯示,但如果我嘗試編輯電話號碼,程序就會崩潰。我嘗試將NSString的contact.phoneNumber.value重新格式化爲「(555)555-5555」以匹配電話號碼在ABPersonViewController中顯示的樣式,但它給了我相同的結果。

有關它爲什麼會崩潰的任何建議?

回答

1

問題是我應該使用kABMultiStringPropertyType而不是kABPersonPhoneProperty作爲phoneNumber。

+0

爲了澄清,'ABMultiValueCreateMutable(kABPersonPhoneProperty)'是錯誤的位。它應該是'ABMultiValueCreateMutable(kABMultiStringPropertyType)'。不幸的是,這個錯誤的例子似乎在網上很普遍在某些情況下,它甚至似乎沒有崩潰地工作,這使我很難找出問題出在哪裏! – robotspacer