gpt4 book ai didi

ios - 在同一列表/表格 View 中显示缓存的服务器联系人和本地 iOS 联系人

转载 作者:行者123 更新时间:2023-11-29 01:09:46 25 4
gpt4 key购买 nike

我的应用程序使用本地 iOS 联系人以及同一列表中的一些服务器联系人。服务器联系人在启动时获取并保存在 NSManagedObjectContext 中。每个服务器联系人都用 Contact 类表示,该类是 NSManagedObject 的子类。

我使用 CNContactStore 获取本地联系人。

问题是如何将这种“加入”到单个列表中。

我想到的是:

1.) 将服务器和本地联系人保存到与联系人对象相同的 NSManagedObjectContext 中,并从那里获取它。-> 优点: - 抓取是统一的-> 缺点: - 本地联系人在存储内存中加倍 - 如果用户从我们的应用程序中添加新的本地联系人,它不会自动显示在列表中

2.) 仅保存服务器联系人,每次用户访问联系人列表时获取本地联系人,并将其附加到列表中优点: - 联系人仅保存一次,始终显示本地联系人更新缺点 - 获取不是单一来源,这使使用 NSFetchResultController

的事情变得复杂

也许还有别的办法?

那么,在同一个列表中显示缓存的服务器联系人和本地 iOS 联系人的最佳方式是什么?

最佳答案

如果是我,我宁愿将这两组联系人分开,而不是将它们合并在一个列表中。提供一些 UI,以便用户可以选择其设备的联系人数据库或应用程序的数据库,并与 NSManagedObject 分开处理 CNContact

如果这是不可能的(或者只是没有吸引力),我会做类似的事情

  1. 在我的核心数据存储中保存服务器联系人。
  2. 将我的 NSManagedObject 子类设计为具有 CNMutableContact 类型的 transient 属性。每当我获取服务器联系人之一时,我都可以获得它的联系人样式对象,而无需将其保存到用户的联系人数据库中。
  3. 从 Core Data 中获取所有服务器联系人,并从 CNContactStore 中获取所有 CNContact 实例,并使用第 2 步中的属性将结果合并到一个数组中。
  4. 显示该数组。当然,这意味着不使用 NSFetchedResultsController,但这就是生活。

您可能还想对 CNMutableContact 进行子类化,以添加一个属性来存储创建它的托管对象的 NSManagedObjectID。然后,如果用户编辑联系信息(如果允许),您可以使用它来找出需要更改的托管对象。

关于ios - 在同一列表/表格 View 中显示缓存的服务器联系人和本地 iOS 联系人,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35901458/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com