这是从iPhone删除联系人的正确方法吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了这是从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);

有人可以帮我吗。

感谢您的帮助。

最大

答案

问题是您正在创建不在通讯簿中的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实例的方式。现在要做的就是比较联系人的姓名。

此代码的警告是,它只会删除名称与ABRecord匹配的delete的一个实例。

以上是关于这是从iPhone删除联系人的正确方法吗?的主要内容,如果未能解决你的问题,请参考以下文章

使用号码搜索 iPhone 地址簿

以编程方式将联系人从outlook导入到iphone

我可以在 android studio 的片段上使用 Firebase 吗?

从 android 联系人中删除单个联系人

这是使用 redux 删除项目的正确方法吗?

如何删除一个联系人中有多个号码的iphone联系人?