iPhone核心数据:可转换属性是否必须转换为仅数据?

Tec*_*Zen 6 iphone cocoa core-data cocoa-bindings

我一直在核心数据中使用可变形属性来将图像和颜色等复杂对象转换为原始数据.我拿了这个 ......

可转换属性背后的想法是您将属性作为非标准类型访问,但在幕后,Core Data使用NSValueTransformer的实例将属性转换为NSData实例和从NSData实例转换属性.然后,Core Data将数据实例存储到持久性存储中.

...表示您只能将数据转换为数据,而不能转换为其他类型的属性(如字符串).

我突然意识到情况可能并非如此.文档可能只是谈论最常见的情况.IIRC,在Cocoa绑定中,转换可以在很大程度上是任意的.例如,可以将NSURL转换为NSString进行显示,然后将其反转.

在我浪费时间进行实验并可能得到令人困惑的结果之前,我想知道是否有人确切知道转换是仅仅来自数据还是来自数据.

Ale*_*lex 4

正确的。您必须将属性转换为NSData对象。您需要序列化一个NSURLto NSData- 默认NSKeyedUnarchiveFromDataTransformerName转换器将为您完成此操作。

另一种方法(也是我用于 URL 的方法)是维护两个并行属性。一个用于 URL 的未定义类型的瞬态属性,另一个用于后备存储的字符串类型的持久属性。第一次请求时,我会根据字符串惰性地构造 URL,并且每当 URL 发生更改时,我都会更新字符串属性。

没有办法强制执行它,但您确实不想使用实体类外部的字符串属性。我通常将@property字符串属性的定义设为私有,以提醒自己不要使用它。

  • 但官方文档显示了一个示例代码片段 use `+ (Class)transformedValueClass { return [NSString class]; }`,看来`NSValueTransformer`可以转换为`NSString`..我完全困惑了..:S (2认同)