NSEntityDescription创建方法之间的区别

时间:2014-01-30 12:17:10

标签: ios core-data creation nsentitydescription

在结果方面,以下两种方法之间有什么区别:

+ (id)insertNewObjectForEntityForName:(NSString *)entityName inManagedObjectContext:(NSManagedObjectContext *)context;

+ (NSEntityDescription *)entityForName:(NSString *)entityName inManagedObjectContext:(NSManagedObjectContext *)context;

我什么时候应该使用它们?

3 个答案:

答案 0 :(得分:4)

insertNewObjectForEntityForName创建实体的实例并将其添加到上下文中。上下文现在很脏,需要保存。返回的实例是NSManagedObject的子类。

entityForName返回描述实体的NSEntityDescription实例,它具有哪些属性和关系,如何构造它们。不会以任何方式修改上下文。

答案 1 :(得分:1)

insertNewObjectForEntityForName:...返回NSManangedObject对象,与下面的代码相同。

NSManagedObjectModel *managedObjectModel =
        [[context persistentStoreCoordinator] managedObjectModel];
NSEntityDescription *entity =
        [[managedObjectModel entitiesByName] objectForKey:entityName];
NSManagedObject *newObject = [[NSManagedObject alloc]
            initWithEntity:entity insertIntoManagedObjectContext:context];
return newObject;

entityForName:..返回NSEntityDescription对象,与下面的代码相同。

NSManagedObjectModel *managedObjectModel = [[context persistentStoreCoordinator] managedObjectModel]; 
NSEntityDescription *entity = [[managedObjectModel entitiesByName] objectForKey:entityName]; 
return entity;

答案 2 :(得分:0)

id变量是表示对象地址的数据类型。因为它只是一个地址,id可以是任何对象,并且因为它的类型是指针,所以你不需要包含*符号

+ (id)insertNewObjectForEntityForName:(NSString *)entityName inManagedObjectContext:(NSManagedObjectContext *)context;

因为*符号表示指向特定类型的指针。

+ (NSEntityDescription *)entityForName:(NSString *)entityName inManagedObjectContext:(NSManagedObjectContext *)context;