【问题标题】:GroupMe Contacts | Address BookGroupMe 联系人 |地址簿
【发布时间】:2011-11-06 18:55:36
【问题描述】:

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

好像是ABPeoplePickerNavigationController cannot be customized

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

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

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

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

【问题讨论】:

    标签: ios uitableview abaddressbook abpeoplepickerview


    【解决方案1】:

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

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

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

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

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

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

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

    【讨论】:

    • 如果您不介意查看此信息,让我知道您使用哪种服务作为将文本发送到的电话号码 - stackoverflow.com/questions/11954720/…。我宁愿不去推测什么时候可以问一位实际的开发人员
    • @jeremysomething - 你提到你能够根据匹配(电话或电子邮件联系人)获取关系 - 苹果是否提供建立这种关系时的日期/时间戳?
    • 是否与手机时间无关,手机时间可以由用户更改。你是如何克服这个问题的?
    猜你喜欢
    • 1970-01-01
    • 2017-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-18
    • 2023-03-07
    • 2016-05-18
    相关资源
    最近更新 更多