我正在尝试将实体放在每个具有非标准数据类型的核心数据存储中--一个是NSDocument,另一个是NSURL。我知道,在.xcdatamodeld中,我需要声明它们是可转换的。我认为我需要添加一些实现NSValueTransformer的东西来将它们转化为NSData (.或者是否有一个默认的变压器可以自动完成这一任务?)
我认为这个问题应该简单地回答:我应该在哪里实现它?我还没有在Swift中找到这样做的明确例子。虽然有一个目标-C示例,但是.h和.m文件的分离使我不清楚这在Swift中的去向。
假设我有一个名为Notebook的实体类型,在数据库中有一个名为folderURL - of类型可转换的属性,在实际变量中有一个名为NSURL的类型。(我用它作为示例,因为它比较简单--请不要告诉我只将NSURL转换为字符串,因为这对另一个可转换的字符串不起作用。)
问题是:假设我需要NSValueTransformer for folderURL,我该把它放在哪里?笔记本应该实现它吗?Notebook+CoreDataProperties应该吗?或者我需要一个名为FolderURL的单独子类来实现它,如果需要,我如何在笔记本(和/或Notebook+CoreDataProperties)中引用这个子类?
(前面有一个关于相似标题的问题,但他们似乎已经有了一些更深入的问题--他们没有询问或演示“哪里”。)
发布于 2016-07-15 17:29:29
“哪里”就在你的项目中的任何地方。确保您的NSValueTransformer子类在运行时存在的任何位置。实现NSValueTransformer子类,并在核心数据模型中输入类名作为值转换器。
但是,是,是一个默认的转换器。任何采用NSCoding协议的类都可以通过核心数据进行自动转换。在这种情况下,您可以将属性标记为可转换的,但不包括类名。这包括NSURL,因此不需要将其转换或转换为字符串。
那么,对于您的NSDocument子类,您可以选择在类中实现NSCoding,也可以为文档类型实现NSValueTransformer子类。
https://stackoverflow.com/questions/38401329
复制相似问题