Certains bêta-utilisateurs de ma prochaine application signalent que la liste des contacts contient beaucoup d'enregistrements en double. J'utilise le résultat de ABAddressBookCopyArrayOfAllPeople
comme source de données pour mon tableau personnalisé de contacts, et je ne comprends pas pourquoi les résultats sont différents de ceux de l'application "Contacts" de l'iPhone.
En regardant de plus près l'application Contacts, il semble que les doublons proviennent d'entrées avec des "cartes liées". Les captures d'écran ci-dessous ont été un peu obscurcies, mais comme vous pouvez le voir, dans mon application, à l'extrême droite, "Céline" apparaît deux fois, alors que dans l'application Contacts, à gauche, il n'y a qu'un seul "Céline". Si vous cliquez sur la ligne de ce seul contact, vous obtenez une carte "Infos unifiées" avec deux "Cartes liées". (comme indiqué au centre, je n'ai pas utilisé les coordonnées de Céline car elles ne tenaient pas sur une seule capture d'écran) :
Les questions relatives aux "cartes liées" ont tout à fait a quelques sujets sur Les forums d'Apple pour les utilisateurs finaux, mais outre le fait que beaucoup pointent vers une Page d'assistance 404 Je ne peux pas, de manière réaliste, réparer les carnets d'adresses de tous les utilisateurs de mon application. Je préférerais traiter ce problème de manière élégante et sans déranger l'utilisateur. Pour aggraver les choses, il semble que je ne sois pas le seul à avoir ce problème, puisque WhatsApp affiche la même liste contenant des contacts en double. .
Pour être clair sur l'origine des contacts en double, je ne stocke pas, ne mets pas en cache ou n'essaie pas d'être intelligent avec le tableau. ABAddressBookCopyArrayOfAllPeople
retours. Les enregistrements en double proviennent donc directement de l'appel API.
Quelqu'un sait-il comment gérer ou détecter ces cartes liées, en empêchant les enregistrements en double d'apparaître ? L'application Contacts d'Apple le fait, comment pouvons-nous le faire nous aussi ?
MISE À JOUR : J'ai écrit une bibliothèque et l'ai mise sur Cocoapods pour résoudre le problème en question. Voir ma réponse ci-dessous