我的应用使用本地iOS联系人以及同一列表中的某些服务器联系人。
服务器联系人在启动时获取并保存在NSManagedObjectContext
中。
每个服务器联系人都用Contact类表示,它是NSManagedObject
的子类。
我使用CNContactStore
获取的本地联系人。
问题是如何处理这个"加入"单列表。
我想到的是:
1。)将服务器和本地联系人保存到与Contact对象相同的NSManagedObjectContext
中,然后从那里获取它。
- >优点: - 获取是统一的
- >缺点: - 本地联系人在商店记忆中加倍
- 如果用户从我们的应用中添加新的本地联系人,它将不会自动显示在列表中
2。)仅保存服务器联系人,每次用户进入联系人列表获取本地联系人,并将其附加到列表
优点: - 联系人只保存一次,始终显示本地联系人更新
cons - fetching不是单一来源,这使用NSFetchResultController
也许还有其他方法?
那么,在同一个列表中显示缓存服务器联系人和本地iOS联系人的最佳方式是什么?
答案 0 :(得分:1)
如果是我,我宁愿将这两组联系人分开,而不是将它们组合在一个列表中。提供一些用户界面,以便用户可以选择其设备的联系人数据库或您应用的数据库,并与CNContact
分开处理NSManagedObject
。
如果那不可能(或者只是没有吸引力),我会做
之类的事情NSManagedObject
子类设计为具有类型CNMutableContact
的瞬态属性。每当我获取一个服务器联系人时,我都可以获得一个联系人样式的对象,而不会将其保存到用户的联系人数据库。CNContact
中的所有CNContactStore
实例中获取所有服务器联系人,并使用步骤2中的属性将结果合并到一个数组中。NSFetchedResultsController
,而是使用生命。您可能还希望子类化CNMutableContact
,以添加一个属性,该属性将存储创建它的托管对象的NSManagedObjectID
。然后,如果用户编辑了联系信息(如果允许的话),您可以使用它来找出需要更改的管理对象。