GroupMe联系人|地址簿

时间:2011-11-06 18:55:36

标签: ios uitableview abaddressbook abpeoplepickerview

我希望像GroupMe一样构建ContactsTableViewController。它显示了我的所有地址簿联系人,甚至是GroupMe用户。

enter image description here

似乎ABPeoplePickerNavigationController cannot be customized

  1. 因此,如果我使用ABAddressBook& ABPerson,使用自定义UITableViewController显示它们的最佳方式是什么?

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

  2. 将GroupMe联系人与地址簿联系人关联/链接的最佳方式是什么?

  3. 在尝试重新创建这个GroupMe风格的界面时,还有其他我应该知道/考虑的事项吗?

1 个答案:

答案 0 :(得分:20)

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

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

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

  3. 最后,我们根据匹配(来自电话,电子邮件,Facebook,Twitter)提取GroupMe关系,并将这些关系存储在Core Data中。如果由于用户的地址簿中已存在电话/电子邮件而建立关系,我们会将这些值传递回关系中,以便我们可以在GroupMe关系与我们存储的联系人之间建立一对一的关系在步骤1的核心数据中。通过这种方式,我们可以轻松地为本地联系人或GroupMe关系创建NSFetchRequest,并在任何时候提供他们的关系详细信息(因此我们可以显示本地联系人是GroupMe用户等 - - 比如屏幕截图中的Aaron G.

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

    唯一的其他提示是确保您的获取请求预取所有关系,因此当您滚动以填充错误时,加载关系原因不会击中核心数据。

    是的,虽然保持您的核心数据与用户的地址簿同步比愚蠢更乏味,但它是值得的,因此您可以轻松访问它并查询需要了解所有爵士乐。