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

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


person rowwingman    schedule 02.04.2012    source источник


Ответы (3)


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

person CarlJ    schedule 02.04.2012

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

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

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

По завершении не забудьте указать исходный код и адресную книгу CFRRelease.

person Aardvark    schedule 11.04.2013

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

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

person MrTJ    schedule 02.04.2012