Это правильный способ удалить контакт с iPhone?
Я пытаюсь удалить контакт с iPhone, который я создал. Я пытался найти хороший рабочий пример удаления контакта, но не нашел. Добавление контакта казалось довольно простым, но удаление кажется трудным. Следующий код не работает, но кажется правдоподобным:
ABAddressBookRef addressBook = ABAddressBookCreate();
ABRecordRef delete = ABPersonCreate();
ABRecordSetValue(delete, kABPersonFirstNameProperty, @"Max", nil);
ABRecordSetValue(delete, kABPersonLastNameProperty, @"Mustermann", nil);
ABAddressBookRemoveRecord(addressBook, delete, &error);
ABAddressBookSave(addressBook, &error);
Кто-нибудь может мне помочь.
Заранее спасибо за помощь.
Максимум
1 ответ
Проблема в том, что вы создаете ABRecord
это не внутри адресной книги. Что вам нужно сделать, это поиск по массиву ABRedord
с из ABAddressBook
, Я написал, как сделать это для вас:
CFErrorRef error = nil;
ABAddressBookRef addressBook = ABAddressBookCreate();
__block ABRecordRef delete = ABPersonCreate();
ABRecordSetValue(delete, kABPersonFirstNameProperty, @"Max", nil);
ABRecordSetValue(delete, kABPersonLastNameProperty, @"Mustermann", nil);
//Gets the array of everybody in the
NSArray *peopleArray = (__bridge NSArray *) ABAddressBookCopyArrayOfAllPeople(addressBook);
//Creates a pass test block to see if the ABRecord has the same name as delete
BOOL (^predicate)(id obj, NSUInteger idx, BOOL *stop) = ^(id obj, NSUInteger idx, BOOL *stop) {
ABRecordRef person = (__bridge ABRecordRef)obj;
CFComparisonResult result = ABPersonComparePeopleByName(person, delete, kABPersonSortByLastName);
bool pass = (result == kCFCompareEqualTo);
if (pass) {
delete = person;
}
return (BOOL) pass;
};
int idx = [peopleArray indexOfObjectPassingTest:predicate];
bool removed = ABAddressBookRemoveRecord(addressBook, delete, &error);
bool saved = ABAddressBookSave(addressBook, &error);
Вы можете изменить, как вы хотите сравнить ABRecord
экземпляры путем изменения кода блока. Все, что он делает сейчас, сравнивает имена контактов.
Предостережение с этим кодом заключается в том, что он удалит только один экземпляр ABRecord
чье имя совпадает delete
"S.