Как получить все контакты из ABAddressBook без дубликатов - PullRequest
3 голосов
/ 02 апреля 2012

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

Ответы [ 3 ]

2 голосов
/ 02 апреля 2012

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

1 голос
/ 11 апреля 2013

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

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

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

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

0 голосов
/ 02 апреля 2012

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

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

...