Как получить все контакты из ABAddressBook без дубликатов
Для получения всех контактов я использую метод ABAddressBookCopyArrayOfAllPeople
, но этот метод возвращает все контакты с дубликатами: в приложении "Контакты" я увидел, что почти каждый мой контакт имеет связанную карту (это показывает мне, что у меня есть два одинаковых контакта один из iCloud, а другой с моего iPad). Как я вижу в этом причину ABAddressBookCopyArrayOfAllPeople
метод возвращает дубликаты контактов.
Как получить все контакты из ABAddressBook без дубликатов?
3 ответа:
Может быть, ABContactHelper может помочь?!
Из памяти я думаю, что это возвращает только одну запись на пользователя:
ABRecordRef source = ABAddressBookCopyDefaultSource(addressBook); addressBookArray = (__bridge_transfer NSArray *)ABAddressBookCopyArrayOfAllPeopleInSourceWithSortOrdering(addressBook, source, kABPersonSortByLastName);
Я использовал его, и он, кажется, работает. Хотя вам придется прыгать через Связанные контакты, чтобы получить все подробности о пользователе.
Не забудьте проверить исходный код и адресную книгу, когда закончите.
У меня была та же проблема, и я не нашел другого решения, то ручной двунаправленный процесс удаления дубликатов:
Два каскадных цикла (ordo n^2), которые противостоят идентификатору записи каждой контактной пары, возвращенной
ABAddressBookCopyArrayOfAllPeople
. Затем я добавляю в окончательный список только контакт сменьшим идентификатором контакта. Это не очень красивое решение, но оно работает для меня.