Ios NSManagedObject实体类方法

Ios NSManagedObject实体类方法,ios,cocoa,core-data,ios10,Ios,Cocoa,Core Data,Ios10,我最近意识到,NSManagedObject子类继承了一个类方法entity,该方法可用于获取类的NSEntityDescription。但是,我习惯于在创建NSEntityDescription时必须指定一个上下文,就像entityForName:inManagedObjectContext:一样。可以使用更简单的实体方法吗?它将与什么上下文关联 此方法由苹果公司记录。一个NSEntityDescription不是托管对象上下文的一部分——它是托管对象模型的一部分 加载数据模型时,将加载该模型

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


此方法由苹果公司记录。

一个
NSEntityDescription
不是托管对象上下文的一部分——它是托管对象模型的一部分

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

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

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

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


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

哪种语言和哪种iOS版本?(请添加标记)我不知道有哪种方法可以在不指定上下文的情况下创建NSManagedObject。我想象实体与创建NSManagedObject时使用的任何上下文相关联。这是一个类方法,因此它与NSManagedObject不关联。当您说“如果您尝试在加载模型之前调用此方法”:在典型的ios使用中,模型具体何时加载?我的意思是,如果您尝试调用[EntityName entity]在定义实体的
NSManagedObjectModel
加载到内存之前。该方法仍然存在,但还没有实体信息。如果使用
NSPersistentContainer
,则在调用
loadPersistentStores(completionHandler:)
时加载模型。如果您没有使用
NSPersistentContainer
,那么您将有专门创建
NSManagedObjectModel
的代码。