Подтвердить что ты не робот

Подкласс NSManagedObject за пределами управляемого объекта как обычный объект

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

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

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

[NSManagedObject alloc] init]

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

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

4b9b3361

Ответ 1

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

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

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

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

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

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

Ответ 2

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