問題は、名簿のABRecord
中にないものを作成していることです。あなたがしなければならないことは、ABRedord
からのの配列を検索することABAddressBook
です。私はあなたのためにこれを行う方法を書きました:
CFErrorRef error = nil;
ABAddressBookRef addressBook = ABAddressBookCreate();
__block ABRecordRef toDelete = ABPersonCreate();
ABRecordSetValue(toDelete, kABPersonFirstNameProperty, @"Max", nil);
ABRecordSetValue(toDelete, kABPersonLastNameProperty, @"Mustermann", nil);
// Gets the array of everybody in the address book
NSArray *peopleArray = (__bridge NSArray *) ABAddressBookCopyArrayOfAllPeople(addressBook);
// Creates a test predicate to see if the ABRecord has the same name as toDelete
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) {
toDelete = person;
}
return (BOOL) pass;
};
int idx = [peopleArray indexOfObjectPassingTest:predicate];
bool removed = ABAddressBookRemoveRecord(addressBook, toDelete, &error);
bool saved = ABAddressBookSave(addressBook, &error);
ABRecord
ブロックコードを変更することで、インスタンスの比較方法を変更できます。現在行っているのは、連絡先の名前を比較することだけです。
このコードの注意点は、名前が'sABRecord
と一致するsのインスタンスを1つだけ削除することです。delete