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

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

Если присмотреться к приложению «Контакты», кажется, что дубликаты происходят из записей с «Связанными картами». Приведенные ниже скриншоты были немного запутаны, но, как вы видите в моем приложении справа, «Celine» появляется дважды, в то время как в приложении "Контакты" слева есть только одна "Селин". Если щелкнуть строку этого единственного контакта, вы получите & quot; Унифицированную информацию & quot; карта с двумя "Связанными картами"(as shown in the center, I didn't use Celine's contact details because they didn't fit on one screenshot):

Screenshot

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

Just to be clear about the origins of the duplicate contacts, I'm not storing, caching or otherwise trying to be smart about the array ABAddressBookCopyArrayOfAllPeople returns. So the duplicate records come directly from the API call.

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

UPDATE: I wrote a library and put it on Cocoapods to solve the issue at hand. See my answer below

Ответы на вопрос(5)

Ваш ответ на вопрос