Перед тем как работать с объектно-ориентированными и основными данными, мне приходилось создавать классы, которые необходимо было инициализировать с помощью определенных параметров, которые после инициализации не могли быть изменены (хотя они могут быть изменены читать).Индивидуальные инициализаторы и свойства только для чтения в базовых данных
с Core Data, я считаю, что может создать настраиваемые инициализации на моем NSManagedObject производного классе до тех пор, как она включает в себя способ вставить объект в контекст, как например:
-(Cell*) initWithOwner:(CellList*)ownerCellList andLocation:(int)initLocation
{
if (self = (Cell*) [NSEntityDescription insertNewObjectForEntityForName:@"Cell"
inManagedObjectContext:[ownerCellList managedObjectContext]])
{
self.location = [NSNumber numberWithInt:initLocation];
self.owner = ownerCellList;
[ownerCellList addCellListObject:self];
}
return self;
}
Обычно, я иметь переменную местоположения, а свойство location будет доступно только для чтения (поэтому после инициализации оно не может быть изменено). Есть ли способ получить такой шаблон с помощью Core Data? Есть ли лучший способ, о котором я не думаю?
Спасибо!
Хм ... у меня возникла другая мысль/вопрос: с помощью указанной выше функции init мне нужно будет сделать [[Cell alloc] initWith ...], так как это не функция уровня класса. Разве это не так неправильно с объектом Core Data, который автоматически выпущен? Было бы более целесообразным заменить функцию initWith ... функцией класса, например createNewCellWithOwner: (CellList *) ownerCellList andLocation: (int) initLocation? Вызов insertNewObjectForEntityForName создает новый объект и, похоже, не входит в процедуру инициализации, верно? – FTLPhysicsGuy
Я этого не заметил. Да, у вас возникает утечка памяти (из начального + выделения), и у вас появятся проблемы, потому что вы не сохраняете результат -inertNewObject ... Я бы использовал self = [self initWithEntity: entity inManagedObjectContext: [ ownerCellIst managedObjectContext]]. –