Чтобы получить все контакты, я использую метод ABAddressBookCopyArrayOfAllPeople
, но этот метод возвращает все контакты с дубликатами: в приложении «Контакты» я увидел, что почти каждый мой контакт имеет связанную карту (это показывает мне, что у меня есть два одинаковых контакта: один из iCloud и другой с моего iPad). Как я вижу в этом причина, метод ABAddressBookCopyArrayOfAllPeople
возвращает дубликаты контактов.
Как получить все контакты из ABAddressBook без дубликатов?
Как получить все контакты из ABAddressBook без дубликатов
Ответы (3)
По памяти я думаю, что это возвращает только одну запись для каждого пользователя:
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