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

标签 ios swift uitableview core-data contacts

我的应用程序使用本地 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/

相关文章:

json - Swift 从 API 接收数据后如何填充我的 tableView

ios - 当 phonegap 应用程序在 iOS 上处于后台时,蜂鸣声不起作用

ios - 如何在 Xamarin Forms iOS 自定义渲染器中获取要换行的文本并在下方添加另一行?

ios - 如何将 UIDocumentPickerViewcontroller 文件上传到 AWS S3 TransferUtility Swift

objective-c - iOS : Dynamic Height For UITableViewCell

iphone - 表格单元格指示器问题

iOS - 尝试使用 Fabric 存档时出现构建错误 (Twitter)

ios - Swift 中的子类 NSMutableData

ios - 为日程应用程序设计 UI (ios Swift)

ios - CGAffineTransformRotate 之后 CGRectIntersection 不起作用