Работа с дублирующимися контактами из-за связанных карточек в API адресной книги iOS

Некоторые пользователи бета-версии -моего будущего приложения сообщают, что список контактов содержит много повторяющихся записей. Я использую результат изABAddressBookCopyArrayOfAllPeopleв качестве источника данных для моего настроенного табличного представления контактов, и меня сбивает с толку то, что результаты отличаются от приложения «Контакты» на iPhone.

При более внимательном рассмотрении приложения «Контакты» кажется, что дубликаты происходят из записей со «Связанными карточками». Скриншоты ниже были немного запутаны, но, как вы видите, в моем приложении справа «Селин» появляется дважды, а в приложении «Контакты» слева есть только одно «Селин». Если щелкнуть строку этого единственного контакта, вы получите карточку «Единая информация» с двумя «связанными карточками» (. как показано в центре, я не использовал контактные данные Селин, потому что они не помещались на одном скриншоте):

Screenshot

Проблемы, связанные с «связанными картами», имеют весьма несколько тем на форумах Apple для конечных пользователей, но помимо того факта, что многие указывают на 404 страница поддержки , я не могу реально исправить все адресные книги пользователей моего приложения. Я бы предпочел сделать это элегантно и не беспокоить пользователя. Что еще хуже, кажется, что я не единственный, кто столкнулся с этой проблемой, так как WhatsApp показывает тот же список, содержащий повторяющиеся контакты .

Просто чтобы прояснить происхождение дубликатов контактов, я не сохраняю, не кэширую и не пытаюсь каким-либо другим образом быть умным в отношении возврата массива ABAddressBookCopyArrayOfAllPeople. Таким образом, повторяющиеся записи поступают непосредственно из вызова API.

Кто-нибудь знает, как справиться с этими связанными картами или обнаружить их,предотвращение появления повторяющихся записей? Приложение «Контакты» от Apple делает это, как остальные из нас могут делать то же самое?

ОБНОВЛЕНИЕ :Я написал библиотеку и поместил ее на Cocoapods, чтобы решить проблему. Смотрите мой ответ ниже

38
задан epologee 3 October 2012 в 20:12
поделиться