Вопрос по ios5, abaddressbook, iphone – Это правильный способ удалить контакт с iPhone?

2

Я пытаюсь удалить контакт с 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   ответ
8

Проблема в том, что ты создаешь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.

Оно работало завораживающе. Спасибо, что нашли время ответить на мой вопрос и дали мне исходный код. Max

Похожие вопросы