2017-09-24 114 views
1

我想知道我们如何管理域模型和NSManagedObject模型。我的场景是我必须显示来自coredata的最后5条评论,我从coredata管理器类中获取,并返回5个评论对象(:NSManagedObject)。现在我想从我们的服务器API中获取下n个注释,并将它们解析到我的域模型对象注释中(继承自NSObject)。iOS管理域模型和NSManagedObject模型

现在我有两种类型的逻辑上代表同一个对象的对象。我想知道最佳实践/设计模式,我们应该如何处理/实施。

一个明显的解决方案是循环NSManagedObject模型并填充5个从NSObject派生的我的域对象的新模型,然后继续从我的APIManager类中获取这些对象。但是我想知道最好的方法,如果有的话。

+0

为什么您有2种类型的评论?您应该对所有数据处理使用相同的nsmanagedobject。但使用它们的视图模型副本作为用户界面。 –

+0

我只想保存前5条评论,用户可以从服务器加载100多(如果有的话),但它们不会被缓存,所以为什么我应该将它们保存在NSManagedObject类中? – Haris

+0

然后,您需要每次删除前5个注释,并将它们替换为新的coredata对象?这听起来像很多工作。我想为什么要用coredata呢。你可以实现一个内存缓存,只保留内存中的最后5个注释并将其序列化到磁盘。如果你需要处理许多许多对象,并且你需要在UI更新上进行表演,Coredata就很好。在你的情况下,一个内存对象就足够了。 Coredata更复杂,风险更大(用于线程安全等)。 –

回答

0

首先,CoreData不是线程安全的,所以不要将这些注释对象用到控制器或视图中。将核心数据隔离在单独的图层中,并将这些对象转换为视图模型或视图的一些其他形式的不可变结构。其次,您可以在“提供者”类中使用nsfetched结果控制器来自动通知您最近5条评论的内容。代表可以通知您何时更改此提供者数据的视图。

您可以使用api ma manager在后台刷新服务器数据,当您获取数据时,将它们存储在coredata中。如果您使用nsfetched结果控制器,则不需要执行任何操作,因为coredata会自动通知您设置的对象以回复您的评论