Ich möchte ein ContactsTableViewController
wie das von GroupM erstellen. Es zeigt alle meine Adressbuchkontakte und sogar welche sind GroupMe Benutzer.
Es scheint, ABPeoplePickerNavigationController kann nicht angepasst werden .
Also, wenn ich Adressbuchkontakte mit ABAddressBook
& amp; ABPerson
, was ist der beste Weg, sie mit einem benutzerdefinierten UITableViewController
anzuzeigen?
Ich möchte nicht alle Kontakte des Adressbuchs in ein NSArray
laden, da dies den Speicher zerstören könnte (ich kenne Leute, die Tausende von Adressbuchkontakten auf ihren Telefonen haben). Ich bin es gewohnt, Core Data & amp; NSFetchedResultsController
für große Ergebnismengen wie diese. Aber um das zu tun, müsste ich ein ABPerson
-Modell in Core Data erstellen, was einfach wäre, aber es synchron zu halten mit dem Adressbuch scheint herausfordernd und irgendwie albern.
Wie lassen sich GroupMe-Kontakte am besten mit Adressbuchkontakten verknüpfen / verknüpfen?
Gibt es noch etwas, das ich wissen / berücksichtigen sollte, wenn ich versuche, diese GroupMe-ähnliche Schnittstelle neu zu erstellen?
Ich bin einer der GroupMe iOS Entwickler und das machen wir.
Wir scannen das Adressbuch des Benutzers und speichern es in Core Data. Wir haben ein Kontaktobjekt mit 1: n-Nummern und 1: n-Adressen. Der erste Scan kann etwas Zeit in Anspruch nehmen, wenn viele Kontakte vorhanden sind, aber bei jedem weiteren Scan ignorieren wir ABRecordRef
mit einem kABPersonModificationDateProperty
vor unserem letzten Scan. Das macht Updates viel schneller.
Wenn der Benutzer sich für die Synchronisierung von Kontakten entschieden hat, laden wir Telefonnummern und E-Mail-Adressen auf unseren Server hoch, die den vorhandenen GroupMe-Nutzern entsprechen.
Schließlich ziehen wir GroupMe-Beziehungen basierend auf Übereinstimmungen (von Telefon, E-Mail, Facebook, Twitter) und speichern diese auch in Core Data. Wenn die Beziehung aufgrund eines bereits im Adressbuch des Benutzers vorhandenen Telefons / einer E-Mail erfolgte, werden diese Werte in den Beziehungen zurückgegeben, sodass wir eine 1: 1-Beziehung zwischen der GroupMe-Beziehung und dem Kontakt herstellen können, den wir in den Core-Daten gespeichert haben Schritt 1. Auf diese Weise können wir einfach NSFetchRequest
s für lokale Kontakte oder GroupMe-Beziehungen erstellen und ihre Beziehungsdetails jederzeit verfügbar haben (so können wir zeigen, dass ein lokaler Kontakt ein GroupMe-Benutzer ist - wie Aaron G. in Dein Screenshot)
Wir verwenden auch NSFetchedResultsController
, damit wir Updates auf der Benutzeroberfläche anzeigen können, wenn unsere Hintergrundoperationen neue Kontakte / Beziehungen finden.
Die einzigen anderen Tipps bestehen darin, sicherzustellen, dass Ihre Abrufanforderung alle Beziehungen vorab abrufen kann, so dass die Ladebeziehungsgründe nicht auf die Stammdaten treffen, wenn Sie zum Auffüllen von Fehlern blättern.
Und yeah, während Sie Ihre Core Data nsync mit dem Adressbuch des Benutzers mühsamer als dumm halten, ist es das wert, so dass Sie einen einfachen Zugang dazu haben und für Fragen, die den ganzen Jazz kennen müssen.
>Tags und Links uitableview ios abaddressbook abpeoplepickerview