如何使用Core Data存储自定义类

时间:2011-10-19 17:06:25

标签: ios core-data nsobject

我有一个扩展NSObject的类。它由一些浮点变量组成。我想将此类存储在核心数据中。

在数据模型中,似乎最可能的选择是将此类转换为二进制数据,以便使用CoreData存储它。

这是对的吗?如果是这样,有人可以指导我如何使用CoreData存储和检索我的课程吗?

谢谢,

3 个答案:

答案 0 :(得分:10)

您可以使用NSValueTransformer从Core Data透明地保存和加载自定义对象的方法。如果您创建的NSValueTransformer可以从您的类转到NSData,反之亦然,您可以将实体中与此类对应的属性标记为可转换。然后,Core Data将允许您在处理此属性时设置和检索此类型的对象。

在我的回答here中,我展示了如何使用UIImage属性执行此操作的代码,Core Data本身不支持这些属性。要为自定义对象执行类似的操作,您需要使其符合NSCoding并实现自己的-encodeWithCoder:-initWithCoder:方法,以将其序列化为NSData实例进行存储。

Apple在“核心数据编程指南”的“Non-Standard Persistent Attributes”部分提供了更多相关文档,包括使用Mac的NSColor类的示例。

答案 1 :(得分:0)

我建议在核心数据中创建一个新的实体,在新实体中对这些字段进行建模,并重构您的代码以使用新的托管对象的自定义子类。

答案 2 :(得分:0)

我的第一个建议是创建一个存储这些值的实体,因为Core Data支持您正在使用的对象类型。

如果您要经常更改此模型/不想处理数据迁移,那么您始终可以将对象的属性设置为可转换为核心数据模型中的类型。然后确保你的类实现NSCoding协议,一旦你这样做,它应该工作正常。