2009-09-02 7 views
12

У меня есть объект объекта Страна с названием страны и кодом страны. Это подкласс NSManagedObject, и я использую его с базовой моделью данных, чтобы сохранить его значение в постоянном хранилище.Подкласс NSManagedObject за пределами управляемого объекта как обычного объекта

У меня есть место, где один и тот же объект страны будет использоваться как обычный объект, т. Е. Я буду использовать его для хранения временного названия страны.

Для этого я инициализируется Страна следующего

[NSManagedObject alloc] init] 

Инициализация успешно сделана, но я не в состоянии установить любое свойство к этому объекту. Следовательно, я сделал исследование. В этом я обнаружил, что init для NSManagedObject не поддерживается в соответствии с документацией.

Я не знаю, как использовать страну NSManagedObject с CoreData, а также обычный объект.

ответ

10

второй абзац обзора в документации класса по NSManagedObject:

Управляемый объект связан с описанием объекта (экземпляр NSEntityDescription), что обеспечивает метаданные об объекте (в том числе именем объект, который представляет объект , и имена его атрибутов и отношений ) и контекст управляемого объекта, который отслеживает изменения графика объекта. Это важно, что управляемый объект правильно настроен для использования с Core Данные. Если вы создаете экземпляр управляемого объекта напрямую, вы должны вызвать назначенный инициализатор (initWithEntity: insertIntoManagedObjectContext :).

Из документации методы:

Важен: Этот метод является назначенным инициализатором NSManagedObject. Вы не должны инициализировать управляемый объект просто , отправив его init.

Документация на самом деле очень хорошая.

Вы не хотите пытаться использовать NSManagedObject за пределами жизнеспособного стека CoreData. NSManagedObjects явно разработаны для работы в правильно настроенной среде Core Data. Если вам нужен временный экземпляр, вы можете создать хранилище в памяти или создать его в своем обычном магазине и просто не сохранять изменения, не удаляя их в первую очередь.

+0

Спасибо! Таким образом, невозможно инициализировать, как и для обычного объекта. Я предполагаю, что вы ссылаетесь на NSInMemoryStoreType для постоянного хранилища, поэтому вставленный объект будет храниться в энергозависимой ОЗУ. У меня есть другой вопрос - когда на самом деле он будет очищен или мы должны его вымыть вручную? – raksja

+0

Он будет очищен, когда вы скажете ему очистить (вручную) или когда ваше приложение завершится ... InMemoryStores работают так же, как и другие магазины, просто эта настойчивость есть ... только в памяти. – bbum

2

Использовать initWithEntity:insertIntoManagedObjectContext: и пройти nil для Контекст управляемого объекта.

Смежные вопросы