如何使用 CoreData 存储自定义类

发布于 2024-12-11 08:44:00 字数 171 浏览 1 评论 0原文

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

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

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

谢谢,

I have a class extending NSObject. It is consisting of a few float variables. I want to store this class in core data.

In the data model, It seems that the most probable option is to turn this class to a binary data in order to store it using CoreData.

Is this correct? If so, can someone please direct me to how I might store and retrieve my class using CoreData?

Thanks,

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

顾忌 2024-12-18 08:44:00

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

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

Apple 在“ 中有更多关于此的文档核心数据编程指南的非标准持久属性”部分,包括使用 Mac 的 NSColor 类的示例。

A way that you can make your custom object transparently saved and loaded from Core Data is to use an NSValueTransformer. If you create an NSValueTransformer that can go from your class to NSData and vice versa, you can mark the attribute in your entity that corresponds to this class as being transformable. Core Data will then let you set and retrieve objects of this type when dealing with this attribute.

In my answer here I show code for how to do this with UIImage attributes, which are not supported natively by Core Data. To do something like this for your custom object, you'll need to make it NSCoding compliant and implement your own -encodeWithCoder: and -initWithCoder: methods to serialize it to an NSData instance for storage.

Apple has more documentation on this in the "Non-Standard Persistent Attributes" section of the Core Data Programming Guide, including an example that uses the Mac's NSColor class.

北凤男飞 2024-12-18 08:44:00

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

I would suggest creating a new Entity in Core Data, modeling those fields in new entity, and refactoring your code to use the new custom subclass of Managed Object.

绝不服输 2024-12-18 08:44:00

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

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

My first suggestion is to create an entity that stores these values as the object types you are using are supported in Core Data.

If you are going to change this model often/dont want to deal with data migration then you can always set property of the object to being transformable as its type in the core data model. Then ensure that your class implements the NSCoding protocol, once you do this then it should work fine.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文