Umgang mit doppelten Kontakten aufgrund verknüpfter Karten in der Adressbuch-API von iOS

Einige Beta-User vonmeine kommende App berichten, dass die Liste der Kontakte viele doppelte Datensätze enthält. Ich benutze das Ergebnis vonABAddressBookCopyArrayOfAllPeople Als Datenquelle für meine angepasste Tabellenansicht von Kontakten verwundert es mich, dass sich die Ergebnisse von der iPhone-App "Kontakte" unterscheiden.

Bei genauerer Betrachtung der Kontakte-App scheinen die Duplikate von Einträgen mit "verknüpften Karten" zu stammen. Die folgenden Screenshots wurden ein wenig verschleiert, aber wie Sie in meiner App ganz rechts sehen, wird "Celine" zweimal angezeigt, während in der Kontakte-App links nur eine "Celine" angezeigt wird. Wenn Sie auf die Zeile dieses einzelnen Kontakts klicken, erhalten Sie eine "Unified Info" -Karte mit zwei "Linked Cards".(Wie in der Mitte gezeigt, habe ich die Kontaktdaten von Celine nicht verwendet, da sie nicht auf einen Screenshot passten.):

Die Probleme rund um "Linked Cards" habenziemlich a einige Themen aufApples Foren für Endverbraucher, aber abgesehen davon, dass viele auf eine404 Support-Seite, Ich kann nicht alle Adressbücher meiner App-Nutzer realistisch reparieren. Ich würde sehr gerne elegant und ohne den Benutzer zu stören damit umgehen. Um die Sache noch schlimmer zu machen, bin ich anscheinend nicht der Einzige, der sich mit diesem Thema befasstWhatsApp zeigt dieselbe Liste mit doppelten Kontakten an.

Um die Ursprünge der doppelten Kontakte zu verdeutlichen, speichere, cache oder versuche ich nicht, auf andere Weise mit dem Array umzugehenABAddressBookCopyArrayOfAllPeople kehrt zurück. Die doppelten Datensätze stammen also direkt aus dem API-Aufruf.

Weiß jemand, wie man mit diesen verknüpften Karten umgeht oder sie erkennt und verhindert, dass doppelte Datensätze angezeigt werden? Apples Kontakte-App macht es, wie kann der Rest von uns das auch?

UPDATE: Ich habe eine Bibliothek geschrieben und sie auf Cocoapods gestellt, um das vorliegende Problem zu lösen. Siehe meine Antwort unten

Antworten auf die Frage(5)

Ihre Antwort auf die Frage