【问题标题】:Showing cached server contact and local iOS contact in the same list/tableview在同一个列表/表格视图中显示缓存的服务器联系人和本地 iOS 联系人
【发布时间】:2016-06-24 09:50:44
【问题描述】:

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

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

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

我想到的是:

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

2.) 只保存服务器联系人,每次用户访问联系人列表时都会获取本地联系人,并将其附加到列表中 优点: - 联系人只保存一次,本地联系人更新总是显示 缺点 - 获取不是单一来源,这会使使用 NSFetchResultController 的事情变得复杂

也许还有其他方法?

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

【问题讨论】:

  • 什么是NSContactStore?如果我用谷歌搜索,这个问题是唯一的结果。
  • 不,它是 iOS 地址簿的新 iOS9 替代品
  • 那么你的意思是CNContactStore
  • 是的,感谢您指出这一点,我已经编辑了我的答案

标签: ios swift uitableview core-data contacts


【解决方案1】:

如果是我,我更愿意将这两组联系人分开,而不是将它们合并到一个列表中。提供一些 UI,以便用户可以选择他们设备的联系人数据库或您的应用程序的数据库,并分别处理 CNContactNSManagedObject

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

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

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

【讨论】:

  • 抱歉回复晚了,谢谢,这就是我最终所做的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-24
相关资源
最近更新 更多