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

时间:2016-03-09 20:00:06

标签: ios swift uitableview core-data contacts

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

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

问题是如何处理这个"加入"单列表。

我想到的是:

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

2。)仅保存服务器联系人,每次用户进入联系人列表获取本地联系人,并将其附加到列表 优点: - 联系人只保存一次,始终显示本地联系人更新 cons - fetching不是单一来源,这使用NSFetchResultController

使事情复杂化

也许还有其他方法?

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

1 个答案:

答案 0 :(得分:1)

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

如果那不可能(或者只是没有吸引力),我会做

之类的事情
  1. 在我的Core Data商店中保存服务器联系人。
  2. 将我的NSManagedObject子类设计为具有类型CNMutableContact的瞬态属性。每当我获取一个服务器联系人时,我都可以获得一个联系人样式的对象,而不会将其保存到用户的联系人数据库。
  3. 从Core Data和CNContact中的所有CNContactStore实例中获取所有服务器联系人,并使用步骤2中的属性将结果合并到一个数组中。
  4. 显示该数组。当然,这将意味着不使用NSFetchedResultsController,而是使用生命。
  5. 您可能还希望子类化CNMutableContact,以添加一个属性,该属性将存储创建它的托管对象的NSManagedObjectID。然后,如果用户编辑了联系信息(如果允许的话),您可以使用它来找出需要更改的管理对象。