6

我想建立一个ContactsTableViewController类似的GroupMe。它显示了我所有的通讯录联系人,甚至还有哪些是 GroupMe 用户。

在此处输入图像描述

似乎ABPeoplePickerNavigationController 无法自定义

  1. ABAddressBook那么,如果我使用&访问通讯簿联系人,ABPerson使用自定义显示它们的最佳方式是UITableViewController什么?

    我不想只将所有通讯簿联系人加载到一个NSArray中,因为这可能会破坏内存(我知道有人在他们的手机上有数千个通讯簿联系人。)。我习惯于使用 Core Data &NSFetchedResultsController来处理像这样的大型结果集。但是,要做到这一点,我必须ABPerson在 Core Data 中创建一个模型,这很容易,但让它与地址簿保持同步似乎具有挑战性并且有点愚蠢。

  2. 将 GroupMe 联系人关联/链接到通讯簿联系人的最佳方式是什么?

  3. 在尝试重新创建这个 GroupMe 风格的界面时,我还有什么需要知道/考虑的吗?

4

1 回答 1

18

我是 GroupMe iOS 开发人员之一,这就是我们所做的。

  1. 我们扫描用户地址簿并将其存储在 Core Data 中。我们有一个 Contact 对象,它具有一对多的电话号码和一对多的电子邮件地址。如果有很多联系人,第一次扫描可能需要一些时间,但在每次后续扫描中,我们都会忽略上次扫描之前的任何扫描ABRecordRefkABPersonModificationDateProperty这使更新速度更快。

  2. 然后,假设用户选择了同步联系人,我们将电话号码和电子邮件地址上传到我们的服务器,这将与现有的 GroupMe 用户匹配。

  3. 最后,我们根据匹配(来自电话、电子邮件、facebook、twitter)提取 GroupMe 关系,并将其存储在 Core Data 中。如果由于用户地址簿中已经存在电话/电子邮件而建立关系,我们将这些值传递回关系中,以便我们可以在 GroupMe 关系和我们存储在 Core Data 中的联系人之间创建一对一的关系第 1 步。这样,我们可以轻松地NSFetchRequest为本地联系人或 GroupMe 关系创建 s,并随时提供他们的关系详细信息(因此我们可以显示本地联系人是 GroupMe 用户等 - 就像屏幕截图中的 Aaron G.)

我们也使用 a NSFetchedResultsController,因此如果我们的后台操作发现任何新的联系人/关系,我们可以在 UI 中反映更新。

唯一的其他提示是确保您的 fetch 请求预取所有关系,以便在滚动填充故障时加载关系原因不会影响核心数据。

是的,虽然让你的 Core Data 与用户的通讯录保持同步比愚蠢更乏味,但它是值得的,这样你就可以轻松访问它并进行需要了解所有爵士乐的查询。

于 2011-11-07T14:31:45.783 回答