2013-04-28 87 views
3

我試圖在iOS中以編程方式替換特定聯繫人的特定電話號碼,並取得聯繫人表單地址簿。如何以編程方式從通訊簿中編輯電話號碼值ios

我不知道爲什麼我無法保存新的電話號碼並刷新地址簿以顯示更改。

我這樣做:

+(BOOL) changeContactPhoneNumber:(NSString *) phoneSought 
       forThis:(NSString *) newPhoneNumber{ 

ABAddressBookRef addressBook = ABAddressBookCreate(); 
ABRecordRef contactSelected; 
CFStringRef mobileLabelNumber; 
CFErrorRef error = nil; 

// Do whatever you want here. 
CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(addressBook); 
CFIndex nPeople = ABAddressBookGetPersonCount(addressBook); 

for (int i = 0; i < nPeople; i++) 
{ 

    ABRecordRef ref = CFArrayGetValueAtIndex(allPeople, i); 

    ABMultiValueRef phones = (ABMultiValueRef)ABRecordCopyValue(ref, kABPersonPhoneProperty); 
    NSString* [email protected]""; 


    if (ABMultiValueGetCount(phones) > 0) { 
     for (int i=0; i < ABMultiValueGetCount(phones); i++) { 
      [mobilePhoneNumber release]; 
      mobilePhoneNumber = (NSString*)ABMultiValueCopyValueAtIndex(phones, i); 

      if([mobilePhoneNumber isEqualToString:phoneSought]){ 
       contactSelected = ref; 
       mobileLabelNumber = ABMultiValueCopyLabelAtIndex(phones, i); 
      } 
     } 
    } 
} 

ABMutableMultiValueRef phoneNumberMultiValue = ABMultiValueCreateMutable(kABPersonPhoneProperty); 
bool didAddPhone = ABMultiValueAddValueAndLabel(phoneNumberMultiValue ,(__bridge CFTypeRef)newPhoneNumber,mobileLabelNumber, NULL); 


if(didAddPhone){ 
    ABRecordSetValue(ABAddressBookGetPersonWithRecordID(addressBook, contactSelected), 
        kABPersonPhoneProperty, 
        phoneNumberMultiValue, 
        nil); 

    bool bSuccess = ABAddressBookSave(addressBook, &error); 
    if (!bSuccess) { 
     NSLog(@"Could not save to address book: %@", error); 
    } else { 
     return YES; 
    } 

} else { 
    NSLog(@"Error editing phone number: %@", error); 
    error = nil; 
} 

return NO; 
} 
+0

我可以知道你使用的是哪個IOS版本嗎? – 2013-04-28 03:20:56

+0

現在我正在使用從iOs 4.3到最後一個版本(6.1.3)...我有另一種方法之前,我要求的權限,如果用戶有iOs 6 – bubudrc 2013-04-28 03:33:29

+0

你沒有提到實際發生了什麼碼。它有多遠?怎麼了? – rmaddy 2013-04-28 05:30:16

回答

3

你應該調試你的代碼,並試圖找出你是否提供給該方法的電話號碼的格式符合。

例如,當我登錄我的聯繫人列表中的電話號碼這些結果

Number...555-478-7672 
Number...(408) 439-5270 
Number...(408) 555-3514 
Number...888-555-5512 
Number...888-555-1212 
Number...555-522-8243 
Number...(555) 766-4823 
Number...(707) 555-1854 
Number...555-610-6679 

,我是比較反對未格式化的數字字符串,這些數字。

其次

ABRecordSetValue(ABAddressBookGetPersonWithRecordID(addressBook, contactSelected), 
       kABPersonPhoneProperty, 
       phoneNumberMultiValue, 
       nil); 

且實際的聲明是

ABRecordSetValue(ABRecordRef record, ABPropertyID property, CFTypeRef value, CFErrorRef* error); 

雖然ABAddressBookGetPersonWithRecordID返回ABRecordRef但是你已經有ABRecordRef contactSelected;所以在我看來,你應該使用

ABRecordSetValue(contactSelected,kABPersonPhoneProperty,phoneNumberMultiValue,nil); 

請指正如果我錯了或誤解了你的代碼!

相關問題