2012-05-23 38 views
0

我想從地址簿聯繫人中刪除特定的電話號碼。ios dev ABMultiValueRemoveValueAndLabelAtIndex返回true,但不起作用

它「似乎」工作,因爲它返回true,但它不。

請問誰能幫我一下嗎?這會很棒!

ABAddressBookRef ab = ABAddressBookCreate(); 
ABRecordRef record = ABAddressBookGetPersonWithRecordID(ab,[myID intValue]); 
    NSError *error = NULL; 

ABMultiValueRef phoneNumbers = ABRecordCopyValue(record,kABPersonPhoneProperty); 

for(CFIndex i=0; i < ABMultiValueGetCount(phoneNumbers); i++){ 
     NSString *phoneNumber = (NSString *)ABMultiValueCopyValueAtIndex(phoneNumbers,i); 
     //ckDebug(@"phoneNumber = %@", phoneNumber); 

     if ([[oDict objectForKey:@"value"] isEqualToString:phoneNumber]) { 

       BOOL didRemove = ABMultiValueRemoveValueAndLabelAtIndex(ABMultiValueCreateMutableCopy(phoneNumbers),i); 
       ckDebug(@"didRemove = %@\n", (didRemove ? @"TRUE" : @"FALSE")); 

       //and save it! 
       BOOL didSave = ABAddressBookSave(ab, (CFErrorRef *) error); 

       ckDebug(@"didSave = %@\n", (didSave ? @"TRUE" : @"FALSE")); 
       if (error) { 
        ckDebug(@"ABAddressBookSaveError = %@", error); 
       } 
     } 
     [phoneNumber release]; 
} 
CFRelease(ab); 
+0

沒有人有答案? :( –

回答

1

你從電話號碼字段的副本刪除的電話號碼,但從來沒有更新與修改後的列表中的記錄。在致電ABAddressBookSave之前,您需要致電ABRecordSetValue

+0

非常感謝!!!這解決了我的問題!:) –

2

所以解決的辦法是:

創建MultiValueRef的MutableCopy,然後從那裏刪除值,並設置複製回記錄和保存...

這樣的:

ABAddressBookRef ab = ABAddressBookCreate(); 
    ABRecordRef record = ABAddressBookGetPersonWithRecordID(ab,[myID intValue]); 
    NSError *error = NULL; 

    ABMultiValueRef phoneNumbers = ABRecordCopyValue(record,kABPersonPhoneProperty); 
    ABMutableMultiValueRef phoneNumberMV = ABMultiValueCreateMutableCopy(phoneNumbers); 

    for(CFIndex i=0; i < ABMultiValueGetCount(phoneNumberMV); i++){ 
     NSString *phoneNumber = (NSString *)ABMultiValueCopyValueAtIndex(phoneNumberMV,i); 
     //ckDebug(@"phoneNumber = %@", phoneNumber); 

     if ([[oDict objectForKey:@"value"] isEqualToString:phoneNumber]) { 
      //now delete it!!! ;-) 
      /* 
      ckDebug(@"phoneNumbers = %@",phoneNumbers); 
      ckDebug(@"index = %d", i); 
      */ 
      BOOL didRemove = ABMultiValueRemoveValueAndLabelAtIndex(phoneNumberMV,i); 
      ckDebug(@"didRemove = %@\n", (didRemove ? @"TRUE" : @"FALSE")); 

      BOOL didSet = ABRecordSetValue(record, kABPersonPhoneProperty, phoneNumberMV, nil); 
      ckDebug(@"didSet = %@\n", (didSet ? @"TRUE" : @"FALSE")); 

      //and save it! 
      BOOL didSave = ABAddressBookSave(ab, (CFErrorRef *) error); 

      ckDebug(@"didSave = %@\n", (didSave ? @"TRUE" : @"FALSE")); 
      if (error) { 
       ckDebug(@"ABAddressBookSaveError = %@", error); 
      } 
     } 
     [phoneNumber release]; 
    } 
    CFRelease(ab); 
+0

+1用於添加「ABMultiValueCreateMutableCopy」調用。這也很重要! – idz

相關問題