我最近意识到NSManagedObject子类继承了一个类方法entity
,可用于为类获取NSEntityDescription
。但是,我习惯于在创建NSEntityDescription
时必须指定上下文,与entityForName:inManagedObjectContext:
一样。是否可以使用更简单的entity
方法以及与之关联的上下文?
此方法由Apple记录not really。
答案 0 :(得分:1)
NSEntityDescription
不是托管对象上下文的一部分 - 它是托管对象模型的一部分。
加载数据模型时,会加载它包含的所有实体描述。类方法+entity
起作用,因为实体描述是与模型对象一起创建的。如果在加载模型之前尝试调用此方法,它将在Objective-C中返回nil
。 (在Swift中由于某种原因它返回一个非可选值,所以它不是nil,但如果你使用它,你的应用程序将崩溃。不要问我为什么会这样。)
如您所述,您也可以使用+entityForName:inManagedObjectContext:
。但请查看该方法的文档:
从与指定的托管对象上下文的持久性存储协调器关联的托管对象模型中返回具有指定名称的实体。
因此,即使该方法采用托管对象上下文参数,它仍然使用托管对象模型。它使用上下文来查找模型。您获得的对象与上下文无关,它与底层数据模型相关联。
这两种方法同样安全。使用代码中最适合的方式。