Как получить все контакты из ABAddressBook без дубликатов


Для получения всех контактов я использую метод ABAddressBookCopyArrayOfAllPeople, но этот метод возвращает все контакты с дубликатами: в приложении "Контакты" я увидел, что почти каждый мой контакт имеет связанную карту (это показывает мне, что у меня есть два одинаковых контакта один из iCloud, а другой с моего iPad). Как я вижу в этом причину ABAddressBookCopyArrayOfAllPeople метод возвращает дубликаты контактов.
Как получить все контакты из ABAddressBook без дубликатов?

3 3

3 ответа:

Может быть, ABContactHelper может помочь?!

Из памяти я думаю, что это возвращает только одну запись на пользователя:

    ABRecordRef source = ABAddressBookCopyDefaultSource(addressBook);
    addressBookArray = (__bridge_transfer NSArray *)ABAddressBookCopyArrayOfAllPeopleInSourceWithSortOrdering(addressBook, source, kABPersonSortByLastName);

Я использовал его, и он, кажется, работает. Хотя вам придется прыгать через Связанные контакты, чтобы получить все подробности о пользователе.

Не забудьте проверить исходный код и адресную книгу, когда закончите.

У меня была та же проблема, и я не нашел другого решения, то ручной двунаправленный процесс удаления дубликатов:

Два каскадных цикла (ordo n^2), которые противостоят идентификатору записи каждой контактной пары, возвращенной ABAddressBookCopyArrayOfAllPeople. Затем я добавляю в окончательный список только контакт сменьшим идентификатором контакта. Это не очень красивое решение, но оно работает для меня.