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;