我最近意识到NSManagedObject子类继承了一个类方法entity,该方法可用于获取该类的NSEntityDescription。但是,与NSEntityDescription一样,我习惯于在创建entityForName:inManagedObjectContext:时必须指定上下文。可以使用更简单的entity方法,它将与什么上下文关联?

Apple记录了此方法not really

最佳答案

NSEntityDescription不是托管对象上下文的一部分,而是托管对象模型的一部分。

加载数据模型时,将加载它包含的所有实体描述。类方法+entity起作用是因为实体描述是与模型对象一起创建的。如果尝试在加载模型之前调用此方法,则它将在Objective-C中返回nil。 (在Swift中,由于某种原因,它返回一个非可选值,因此它不是nil,但是如果使用它,则应用程序将崩溃。不要问我为什么会这样)。

您还可以使用+entityForName:inManagedObjectContext:,如上所述。但是请查看该方法的文档:

从与指定托管对象上下文的持久性存储协调器关联的托管对象模型中返回具有指定名称的实体。

因此,即使该方法采用托管对象上下文参数,它仍在使用托管对象模型。它使用上下文来查找模型。您获得的对象与上下文无关,它与基础数据模型相关。

这两种方法同样安全。使用最适合您代码的代码。

10-08 05:50
查看更多