在同一 list/tableview 中显示缓存的服务器联系人和本地 iOS 联系人
Showing cached server contact and local iOS contact in the same list/tableview
我的应用程序使用本地 iOS 联系人以及同一列表中的一些服务器联系人。
服务器联系人在启动时获取并保存在 NSManagedObjectContext
中。
每个服务器联系人都用联系人 class 表示,它是 NSManagedObject
的子 class。
我使用 CNContactStore
获取的本地联系人。
问题是如何将这个 "joining" 处理成单个列表。
我想到的是:
1.) 将服务器和本地联系人保存到与联系人对象相同的 NSManagedObjectContext
中,并从那里获取。
-> 优点: - 抓取是统一的
-> 缺点: - 本地联系人在存储内存中加倍
- 如果用户从我们的应用程序中添加新的本地联系人,它不会自动显示在列表中
2.) 仅保存服务器联系人,每次用户访问联系人列表时获取本地联系人,并将其附加到列表中
优点: - 联系人仅保存一次,始终显示本地联系人更新
缺点 - 获取不是单一来源,这使使用 NSFetchResultController
的事情变得复杂
也许还有其他方法?
那么,在同一个列表中显示缓存的服务器联系人和本地 iOS 联系人的最佳方式是什么?
如果是我,我宁愿将这两组联系人分开,也不愿将它们合并到一个列表中。提供一些 UI 以便用户可以 select 他们设备的联系人数据库或您应用程序的数据库,并与 NSManagedObject
.
分开处理 CNContact
如果那不可能(或者只是没有吸引力),我会做类似的事情
- 在我的 Core Data 存储中只保存 个服务器联系人。
- 将我的
NSManagedObject
子类设计为具有 CNMutableContact
类型的瞬态 属性。每当我获取其中一个服务器联系人时,我都可以获得一个联系人样式的对象,而无需将其保存到用户的联系人数据库中。
- 从 Core Data 中获取我所有的服务器联系人,从
CNContactStore
中获取所有 CNContact
实例,并使用步骤 2 中的 属性 将结果合并到一个数组中。
- 显示那个数组。当然,这意味着不使用
NSFetchedResultsController
,但这就是生活。
您可能还想对 CNMutableContact
进行子类化,以添加一个 属性 来存储创建它的托管对象的 NSManagedObjectID
。然后,如果用户编辑联系信息(如果允许的话),您可以使用它来找出您需要更改的托管对象。
我的应用程序使用本地 iOS 联系人以及同一列表中的一些服务器联系人。
服务器联系人在启动时获取并保存在 NSManagedObjectContext
中。
每个服务器联系人都用联系人 class 表示,它是 NSManagedObject
的子 class。
我使用 CNContactStore
获取的本地联系人。
问题是如何将这个 "joining" 处理成单个列表。
我想到的是:
1.) 将服务器和本地联系人保存到与联系人对象相同的 NSManagedObjectContext
中,并从那里获取。
-> 优点: - 抓取是统一的
-> 缺点: - 本地联系人在存储内存中加倍
- 如果用户从我们的应用程序中添加新的本地联系人,它不会自动显示在列表中
2.) 仅保存服务器联系人,每次用户访问联系人列表时获取本地联系人,并将其附加到列表中
优点: - 联系人仅保存一次,始终显示本地联系人更新
缺点 - 获取不是单一来源,这使使用 NSFetchResultController
也许还有其他方法?
那么,在同一个列表中显示缓存的服务器联系人和本地 iOS 联系人的最佳方式是什么?
如果是我,我宁愿将这两组联系人分开,也不愿将它们合并到一个列表中。提供一些 UI 以便用户可以 select 他们设备的联系人数据库或您应用程序的数据库,并与 NSManagedObject
.
CNContact
如果那不可能(或者只是没有吸引力),我会做类似的事情
- 在我的 Core Data 存储中只保存 个服务器联系人。
- 将我的
NSManagedObject
子类设计为具有CNMutableContact
类型的瞬态 属性。每当我获取其中一个服务器联系人时,我都可以获得一个联系人样式的对象,而无需将其保存到用户的联系人数据库中。 - 从 Core Data 中获取我所有的服务器联系人,从
CNContactStore
中获取所有CNContact
实例,并使用步骤 2 中的 属性 将结果合并到一个数组中。 - 显示那个数组。当然,这意味着不使用
NSFetchedResultsController
,但这就是生活。
您可能还想对 CNMutableContact
进行子类化,以添加一个 属性 来存储创建它的托管对象的 NSManagedObjectID
。然后,如果用户编辑联系信息(如果允许的话),您可以使用它来找出您需要更改的托管对象。