我正在尝试将实体放在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的问题,但他们似乎已经比这更进一步 - 他们没有询问或证明“在哪里”。)
答案 0 :(得分:2)
“where”就在你项目的任何地方。确保您的NSValueTransformer
子类在运行时存在的任何位置。实现NSValueTransformer
子类,并在Core Data模型中输入类名作为值转换器。
然而是默认变换器。任何采用NSCoding
协议的类都可以由Core Data自动转换。在这种情况下,您将属性标记为可转换但不包含类名。这包括NSURL
,因此您无需对其进行转换或将其转换为字符串。
对于您的NSDocument
子类,您可以选择在类中实现NSCoding
或为文档类型实现NSValueTransformer
子类。