核心数据和运行时密钥值编码

时间:2010-01-29 23:22:05

标签: iphone objective-c core-data key-value-coding

我的印象是,通过键值编码,我可以在运行时在NSManagedObject上设置任何未定义的属性,并且不会抛出任何异常,但是它可以保持附加到模型的对象不在数据模型。

例如,我有一个没有“bar”属性的Foo对象。我虽然在运行时,我可以像这样设置它:

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 个答案:

答案 0 :(得分:1)

这个问题NSManagedObject subclasses and setValuesForKeysWithDictionary:可能是相关的。

从概念上讲,我认为你不能安全地分配随机值和密钥。这样做似乎可能会破坏对象图。

答案 1 :(得分:1)

在数据模型中,您可以将属性设置为“瞬态”

这允许您设置该属性,但它不会保存在商店中,但仍可用于查询和撤消。

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