ios - 在 Core Data 中存储 UIColor 对象

标签 ios core-data uicolor

我想将 UIColor 对象存储为 Core Data 实体的一个属性,然后检索它并以与对该实体的其他属性相同的方式使用它。

在我的研究中,虽然文献似乎很少,但我发现 this post表示该属性应指定为“可转换”,并且应使用 NSKeyedArchiver 手动转换数据,并使用 NSKeyedUnarchiver 输出。

然后,我找到了 a more recent post说所有必要的就是将 UIColor 作为 Transformable 属性保存在 CD 中,生成一个 Managed Object 子类,并像其他属性一样使用。

Apple docs themselves深入了解有关存储和检索 NSColor 对象的一些细节,但不是(我能找到的)UIColor 对象。但是,这听起来像是归档/取消归档是在 CD 中自动处理的。也许。我对这一行感到困惑:

如果您在 Xcode 中使用模型编辑器,请在属性的类型弹出窗口中选择可转换,然后在值转换器名称文本字段中键入名称。

我假设他们在谈论属性的名称,但我不确定,特别是因为它警告显式指定转换器引起的潜在问题:

重要:虽然默认的transformer是NSKeyedUnarchiveFromDataTransformerName指定的transformer,但是实际上这个transformer是反向使用的。如果您明确指定默认转换器,Core Data 会“在错误的方向”使用它。

我已经到了这样的地步,我有一个名为“颜色”的新可转换属性(没有命名转换器)并生成了一个包含新“颜色”属性(类型 id)的新子类文件。

我只是很困惑。有人可以给我一些关于如何从这里开始的明确指导吗?

如果重要的话,我正在使用 MagicalRecord 与 Core Data 交互。

非常感谢您的帮助!

最佳答案

您的属性应该是 Transformable 类型。默认值转换器(NSKeyedUnarchiveFromDataTransformerName)可以转换任何符合 NSCoding 的对象。

  1. 将属性标记为“可转换”类型。
  2. 可选:将值转换器名称设置为“NSKeyedUnarchiveFromDataTransformerName”。如果你不这样做,它无论如何都会默认为这个。

Like so

您无需执行任何其他操作。请记住,您将无法将可转换属性与谓词匹配或按它们排序。它们几乎只是存储——值转换器将对象值转换为 NSData,这是在存储中持久化的内容。当属性故障触发时,Core Data 在另一个方向使用转换器从 NSData 转到您的对象类型。

关于ios - 在 Core Data 中存储 UIColor 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23835093/

相关文章:

ios - swift 中的整数在输出中一次产生一个 int

ios - 如何使标签宽度自动调整

iphone - Objective-C 中的十六进制值

objective-c - UIColor CMYK 和 Lab 值

ios - MPMoviePlayerController 不播放本地文件

core-data - 在 Swift 3 中删除核心数据实体中的所有数据

ios - NSPredicate 包含搜索包含数字和字母的字符串

ios - 复杂的 NSPredicates : comparing values on the most-recent object

ios - 为什么 UIColor.white、red、green 和 blue 不工作,但所有其他颜色常量都工作正常?

ios - Crashlytics 中的 EXC_BREAKPOINT 0x00000000e7ffdefe