GroupMe Контакты | Адресная книга

Я хочу создать ContactsTableViewController, как у GroupMe. Он показывает все мои контакты адресной книги и даже те, которые являются пользователями GroupMe.

введите описание изображения здесь

Кажется, что ABPeoplePickerNavigationController нельзя настроить.

  1. Итак, если я обращаюсь к контактам адресной книги с помощью ABAddressBook & ABPerson, как лучше всего отображать их с помощью настраиваемого UITableViewController?

    Я не хочу просто загружать все контакты из адресной книги в NSArray, потому что это может убить память (я знаю людей, у которых на телефонах тысячи контактов из адресной книги). Я привык использовать Core Data & NSFetchedResultsController для таких больших наборов результатов. Но для этого мне пришлось бы создать ABPerson модель в Core Data, что было бы легко, но синхронизация ее с адресной книгой кажется сложной и отчасти глупой.

  2. Как лучше всего связать / связать контакты GroupMe с контактами из адресной книги?

  3. Есть ли что-нибудь еще, что я должен знать / учитывать при попытке воссоздать этот интерфейс в стиле GroupMe?


person ma11hew28    schedule 06.11.2011    source источник


Ответы (1)


Я один из разработчиков GroupMe iOS, и мы этим занимаемся.

  1. Мы сканируем адресную книгу пользователей и сохраняем ее в Core Data. У нас есть объект «Контакт», в котором «1 ко многим» соответствует телефонным номерам, а «1 ко многим» - адресам электронной почты. Первое сканирование может занять немного времени, если контактов много, но при каждом последующем сканировании мы игнорируем все ABRecordRef, у которых есть kABPersonModificationDateProperty перед нашим последним сканированием. Это делает обновления намного быстрее.

  2. Затем, если пользователь выбрал синхронизацию контактов, мы загружаем номера телефонов и адреса электронной почты на наш сервер, которые будут соответствовать существующим пользователям GroupMe.

  3. Наконец, мы извлекаем отношения GroupMe на основе совпадений (по телефону, электронной почте, Facebook, Twitter) и также сохраняем их в Core Data. Если связь была установлена ​​из-за телефона / электронной почты, уже существующего в адресной книге пользователя, мы передаем эти значения обратно в отношения, чтобы мы могли создать отношение 1 к 1 между отношением GroupMe и контактом, который мы сохранили в Core Data в шаг 1. Таким образом, мы можем легко создать NSFetchRequests для локальных контактов или отношений GroupMe и получить информацию об их отношениях в любой момент (чтобы мы могли показать, что локальный контакт является пользователем GroupMe и т. д. - как Аарон Г. на вашем снимке экрана)

Мы также используем NSFetchedResultsController, поэтому мы можем получать обновления, отражаемые в пользовательском интерфейсе, если наши фоновые операции обнаруживают какие-либо новые контакты / отношения ...

Единственные другие советы - убедиться, что у вас есть предварительная выборка всех взаимосвязей в запросе на выборку, чтобы причины взаимосвязи загрузки не затрагивали основные данные при прокрутке для заполнения ошибок.

И да, хотя поддерживать синхронизацию Core Data с адресной книгой пользователя более утомительно, чем глупо, оно того стоит, чтобы у вас был легкий доступ к ним и для запросов, которые должны знать весь этот джаз.

person jeremysomething    schedule 07.11.2011
comment
если вы не против взглянуть на это, чтобы сообщить мне, какую службу вы используете в качестве номера телефона, на который отправляется текст - stackoverflow.com/questions/11954720/. Я бы предпочел не спекулировать, когда я могу просто спросить одного из реальных разработчиков - person mistahenry; 14.08.2012
comment
@jeremysomething - вы упомянули, что можете получать отношения на основе совпадений (по телефону или электронной почте) - предоставляет ли Apple дату / время, когда эти отношения были установлены? - person katelyn friedson; 13.02.2013
comment
не зависит ли это от времени телефона, время телефона может быть изменено пользователем. Как вы преодолели эту проблему? - person Manish Agrawal; 30.04.2013