核心数据中NSManagedObjects的正确用法

时间:2013-10-14 13:41:05

标签: ios core-data nsmanagedobject nsmanagedobjectmodel

我目前正在深入研究Core Data,并且对使用Core Data NSManagedObject Models有一些小麻烦。

例如,我会有一个“联系人”实体,其中包含名字,姓氏,地址等属性......

我想要了解的是,如果使用NSManagedObject作为常规NSObject,有任何“最佳实践”,如果可能的话。

例如,我有一台服务器以JSON方式返回一些联系人数据,但我想将其作为某种NSObject返回,因此它将拥有自己的属性,方法等......但另一方面它会是愚蠢的创建2个类来表示联系实体 - 一个用于处理我希望从服务器数据(NSObject)提供已清理对象的情况,另一个用于处理我想处理核心数据(NSManagedObject)的情况。有两种方法可以使用单个对象吗?在这种情况下最好的做法是什么?

修改 的 这是我遇到的一般问题:http://pastebin.com/WHWNqj2f

1 个答案:

答案 0 :(得分:0)

没有必要为此设置多个类 - 只需在所有情况下使用托管对象。你在评论中提到“我不能只是初始化一个NSManagedObject而不给它一个上下文”但事实上并非如此。使用[NSManagedObject initWithEntity:insertIntoManagedObjectContext:][NSEntityDescription insertNewObjectForEntityForName:inManagedObjectContext:] 创建托管对象时,您不必提供托管对象上下文。只要您提供有效的nil,如果该参数为NSEntityDescription,则没有问题。您得到的是一个托管对象,它不依赖于任何托管对象上下文。这对于临时对象来说非常方便,因为您可以保存所有托管对象上下文中的更改而不保存此对象。

如果您希望稍后将对象保存到托管对象上下文,请使用[NSManagedObjectContext insertObject:]。此时,托管对象与上下文关联,因此保存对上下文的更改将保存对象。