Использовать класс NSManagedObject без initWithEntity:?

Моя проблема похожа на: Проблема создания производного класса NSManagedObject

Я настроил NSManagedObject в Core Data и создал для него класс. Однако вместо создания идентичного класса NSObject я хотел бы использовать класс NSManagedObject, но не хочу создавать объект и сохранять его. Я просто хочу использовать его для массива, только когда мне нужно сохранить объект в Core Data, я хочу использовать insertEntity:

Store *store = [[Store alloc] init];

У меня выдает следующую ошибку: CoreData: error: Failed to call designated initializer on NSManagedObject class 'Store'

Есть ли способ создать подкласс или каким-то образом использовать класс/свойства NSManagedObject для выделения объектов, которые я просто временно использую для таблицы?

Спасибо.


person runmad    schedule 15.11.2011    source источник


Ответы (2)


Просто используйте initWithEntity:insertIntoManagedObjectContext: и передайте контекст nil, а затем вызовите insertObject: в своем NSMAnagedObjectContext, когда вы готов:

NSEntityDescription *entity = [NSEntityDescription entityForName:@"MyModelClass" inManagedObjectContext:myContext];
id object = [[MyModelClass alloc] initWithEntity:entity insertIntoManagedObjectContext:nil];
person daveoncode    schedule 15.11.2011
comment
Вы не передаете nil при создании описания сущности. У меня нет или я не хочу создавать контекст. - person runmad; 15.11.2011
comment
Насколько надежен этот метод? Кажется, это работает, поэтому я проголосовал, но это задокументированный способ сделать это? - person Raj Pawan Gumdal; 02.08.2012
comment
Может также передать описание объекта, так что ЕСЛИ вы когда-нибудь захотите вставить его, вы можете это сделать. - person amcc; 18.06.2014

Если вы не сохраните MOC, вы можете просто удалить объект перед сохранением, и он никогда не будет сохранен.

Хотя Core Data отлично подходит для сохранения, это не обязательно. На самом деле MOC часто называют блокнотом. Вы можете создавать объекты, а затем выбрасывать их.

Экземпляр NSManagedObjectContext представляет собой единое «объектное пространство» или блокнот в приложении.

Другое решение состоит в том, чтобы иметь отдельный MOC для временных объектов, а затем либо выбросить временный MOC, либо переместить MO в ваш постоянный MOC.

Таким образом, в этом случае вы должны - (void)insertObject:(NSManagedObject *)object использовать «Постоянный MOC», а затем - (void)deleteObject:(NSManagedObject *)object «Временный MOC».

person logancautrell    schedule 15.11.2011