iOS 上聊天应用程序的大型 CNContactStore 联系人列表的检索和维护

问题描述

我目前正在开发一个聊天应用程序,我需要保留一份 cncontact 商店列表的副本,以匹配应用程序中收件人的姓名和详细信息。当用户一个非常大的地址簿时,我很难过。我在后台线程上运行此任务,但它有时会减慢应用程序的速度,并且有时地址簿上的最新更新未反映在应用程序中。

处理大型地址簿列表时的方法是什么,我应该如何继续维护它?我是否应该将其全部存储在 ManagedContext 中并在每次应用程序打开时重新检查它,因为更新发生时来自 Apple 的通知并未始终反映在应用程序中?只是想知道有多大的聊天应用程序可以在不阻塞 UI 的情况下进行列表的妙招,并且它始终是最新的。任何帮助将不胜感激。

解决方法

? 您真的需要在应用程序中存储此列表的副本吗?我怀疑出于安全原因,这也应该是必要的。作为用户,我对我的联系人列表被镜像到应用程序的感觉不是很好。

难道不是只有在用户打开联系人列表或想写新消息时才需要这个列表吗?你可以使用像

这样的技术
  • 列表视图的分页,即仅加载 20 个联系人,并在用户滚动时加载更多
  • 用于在用户键入时加载联系人的谓词:return this.cache!;
  • 联系人框架有一个非常好的 API 来获取部分联系人数据。获取某些数据比其他数据更耗时。只获取您真正需要的:CNContact.predicateForContacts(matchingName: "Appleseed")

仅获取具有部分数据的联系人

let keysToFetch = [CNContactGivenNameKey,CNContactFamilyNameKey] as [CNKeyDescriptor]

您可以在 official docs

中阅读更多相关信息