iPhone核心数据: Do Transformable Attributes have to Transform to only Data?

标签 iphone cocoa core-data cocoa-bindings

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

The idea behind transformable attributes is that you access an attribute as a non-standard type, but behind the scenes Core Data uses an instance of NSValueTransformer to convert the attribute to and from an instance of NSData. Core Data then stores the data instance to the persistent store.

...意味着您只能将事物与数据相互转换,而不能与其他类型的属性之一(例如字符串)进行转换。

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

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

最佳答案

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

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

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

关于iPhone核心数据: Do Transformable Attributes have to Transform to only Data?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2188273/

相关文章:

objective-c - 是否可以控制 Yosemite 中半透明/模糊背景的活力?

multithreading - 第二个内存中存储作为缓存

ios - 如何发出多个 GET 请求并等待所有操作完成?

iphone - UIKit 状态保存不恢复滚动偏移

iphone - 如何检查 iOS 分发配置文件是否启用了推送通知?

cocoa - 删除 cocoa 基于文档的应用程序中的保存功能

ios - 核心数据 : Data is not been saved up

iphone - 如何在 Iphone 上嵌入无法启动外部播放器的 youtube 视频?

iphone - 代码错误 : The selected run destination is not valid for this action

objective-c - @property 问题 - Objective C