iOS >> Базовые данные >> NSEntityDescription >> Методы создания

В чем разница с точки зрения результата между двумя следующими методами:

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

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

Когда я должен использовать каждый из них?

3 ответа

insertNewObjectForEntityForName создает экземпляр объекта и добавляет его в контекст. Контекст теперь грязный и должен быть сохранен. Возвращенный экземпляр является подклассом NSManagedObject,

entityForName возвращает NSEntityDescription экземпляр, который описывает сущность, какие атрибуты и отношения она имеет, как они построены. Контекст не изменяется в любом случае.

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;

Переменная id - это тип данных, который представляет адрес объекта. Поскольку это просто адрес, id может быть любым объектом, а так как его тип - указатель, вам не нужно включать символ *

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

Поскольку символ * обозначает указатель на определенный тип.

+ (NSEntityDescription *)entityForName:(NSString *)entityName inManagedObjectContext:(NSManagedObjectContext *)context;
Другие вопросы по тегам