0

我正在尝试将实体放在每个具有非标准数据类型的核心数据存储中 - 一个是 NSDocument,另一个是 NSURL。我在 .xcdatamodeld 中得到了这一点,我需要将它们声明为可转换的。而且我认为我需要添加一些实现 NSValueTransformer 的东西来将它们变成 NSData (......或者是否有一个默认的转换器会自动执行此操作?)

我认为这个问题应该很容易回答:我在哪里实现它?我还没有找到在 Swift 中执行此操作的明确示例。有一个Objective-C 的例子,但是 .h 和 .m 文件的分离让我不清楚这在 Swift 中会去哪里。

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

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

(之前有一个类似标题的问题,但他们似乎已经比这更进一步了——他们没有询问或展示“在哪里”。)

4

1 回答 1

2

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

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

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

于 2016-07-15T17:29:29.047 回答