在Swift中为Core Data实现NSValueTransformer的位置

时间:2016-07-15 16:48:02

标签: swift macos cocoa core-data nsvaluetransformer

我正在尝试将实体放在Core Data存储中,每个实体都有非标准数据类型 - 一个是NSDocument,另一个是NSURL。我在.xcdatamodeld中得到它我需要将它们声明为Transformable。我想我需要添加一些实现NSValueTransformer的东西来将它们变成NSData(...还是有一个默认的变换器可以自动完成?)

我认为问题应该很简单:我在哪里实施?我还没有找到在Swift中这样做的明确示例。有一个Objective-C example但是.h和.m文件的分离让我不清楚Swift会在哪里。

假设我有一个名为Notebook的实体类型,其属性名为folderURL - 数据库中的Transformable类型,实际变量中的NSURL类型。 (我使用它作为示例,因为它更简单 - 请不要告诉我只是将NSURL转换为String,因为这对其他Transformable不起作用。)

问题是:假设我需要一个NSValueTransformer,我在哪里把它放在了folderURL?笔记本应该实现吗?应该是Notebook + CoreDataProperties吗?或者我是否需要一个名为FolderURL的单独子类来实现它,如果是这样,我如何在Notebook(和/或Notebook + CoreDataProperties)中引用该子类?

(之前有一个similar title的问题,但他们似乎已经比这更进一步 - 他们没有询问或证明“在哪里”。)

1 个答案:

答案 0 :(得分:2)

“where”就在你项目的任何地方。确保您的NSValueTransformer子类在运行时存在的任何位置。实现NSValueTransformer子类,并在Core Data模型中输入类名作为值转换器。

然而默认变换器。任何采用NSCoding协议的类都可以由Core Data自动转换。在这种情况下,您将属性标记为可转换但不包含类名。这包括NSURL,因此您无需对其进行转换或将其转换为字符串。

对于您的NSDocument子类,您可以选择在类中实现NSCoding或为文档类型实现NSValueTransformer子类。