Кодирование основных данных и ключа времени выполнения - PullRequest
3 голосов
/ 30 января 2010

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

Например, у меня есть объект Foo, у которого нет атрибута "bar". Я думал, что во время выполнения я мог бы установить это так:

Foo *foo = [NSEntityDescription insertNewObjectForEntityForName:@"Foo" inManagedObjectContext:ManagedObjectContext];
[foo setValue:@"foobar" forUndefinedKey:@"bar"];

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

Известная ошибка продолжает появляться, когда я запускаю этот код:

the entity Foo is not key value coding-compliant for the key "bar"

.. поэтому мой вопрос: что я не понимаю или делаю неправильно?

Ответы [ 2 ]

1 голос
/ 30 января 2010

В вашей модели данных вы можете установить атрибуты как «Переходные»

Это позволяет вам установить этот атрибут, но он не будет сохранен в магазине, но все равно будет доступен для запросов и отмены.

http://2pi.dk/tech/cocoa/transient_properties.html

1 голос
/ 30 января 2010

Этот вопрос, NSManagedObject подклассы и setValuesForKeysWithDictionary: , может быть актуальным.

Концептуально, я не думаю, что вы можете безопасно назначать случайные значения и ключи. Это может привести к нарушению графа объектов.

...