2016-09-27 56 views
1

删除多个联系人是这样的,我通过数组CFArrayRef然后删除联系人,但代码是不工作:我的代码如何从通讯录

CFArrayRef arrayRef = (__bridge CFArrayRef)multipleSeleted; 
ABAddressBookRef addressbook = ABAddressBookCreate(); 
if (arrayRef != NULL)  { 
     int count = CFArrayGetCount(arrayRef); 
     for (int i = 0; i < count; ++i){ 
      ABRecordRef contact = CFArrayGetValueAtIndex(arrayRef, i); 
      ABAddressBookRemoveRecord(addressbook, contact, nil); 
     } 
} 
+0

您想从设备联系人中删除联系人吗?还是从阵列? – Janmenjaya

+0

从设备上删除 – iOS

+0

[我如何从主AddressBook中删除联系人,当我删除objective-c中的特定组时?](http://stackoverflow.com/questions/35569682/how-can-i-delete-当我删除特定组中的代码时 – Lion

回答

1

你可以做这样

我已经写了你的方法,只是通过触点阵列将被删除

我的代码:

-(void)removeSlectedContactList:(CFArrayRef)arrContacts { 
    ABAddressBookRef addressbook = ABAddressBookCreate(); 
    if (arrContacts) 
    { 
     int count = CFArrayGetCount(arrContacts); 
     for (int i = 0; i < count; ++i) 
     { 
      ABRecordRef contact = CFArrayGetValueAtIndex(arrContacts, i); 
      ABAddressBookRemoveRecord(addressbook, contact, nil); 
     } 
    } 
    ABAddressBookSave(addressbook, nil); 
    CFRelease(addressbook); 
} 

如果你的名字的人然后通过您的阵列循环获取重复的用户列表,然后删除

以下是示例代码:

NSString *searchName = @"NameOfUser"; 
ABAddressBookRef addressBook = ABAddressBookCreate(); 
CFStringRef nameRef = (__bridge CFStringRef) searchName; 
CFArrayRef arrSearchUsers = ABAddressBookCopyPeopleWithName(addressbook, nameRef); 
[self removeSlectedContactList:arrSearchUsers]; 
+0

我传递给CFArrayRef,因为我传递了NSMutable数组,导致错误在ABAddressBookSave(addressbook,nil); – iOS

+0

不,您需要传递CFArray。我想你有那些重复联系人的名单。否则你的数组中有什么? – Janmenjaya

+0

我有我想要删除的数组上的用户的名称 – iOS

0

上面代码中删除记录从数组列表在内存中。为了从通讯录中删除您需要在此行后面调用保存功能ABAddressBookRemoveRecord(addressbook, contact, nil);

CFErrorRef error=NULL; 
ABAddressBookSave(addressBook,&error); 

希望这会有所帮助。

+0

添加此代码后,出现错误EXC_BAD_ACCESS – iOS

0

你可以尝试使用RHAddressBook库,我不建议你使用C风格的API,它是很难的工作。