向核心数据类添加自定义方法

Posted

技术标签:

【中文标题】向核心数据类添加自定义方法【英文标题】:Adding custom methods to core data classes 【发布时间】:2009-12-24 10:36:30 【问题描述】:

将自定义方法添加到我的核心数据生成类的最佳方式是什么?

例如,假设我有一个具有属性“firstname”和“lastname”的“Person”实体。我希望添加一个“全名”方法,该方法返回名字和姓氏属性的串联。

我可以将该方法添加到生成的 .h 和 .m 文件中,但是当我的实体仍然可能发生变化时,这将很难在开发过程中维护。重新创建 .h 和 .m 文件将覆盖这些更改。另一个想法是对生成的类进行子类化并在其中添加方法。

有没有更好的办法?

【问题讨论】:

【参考方案1】:

我发现添加不直接绑定到数据属性的自定义方法的最佳方法是使用类别。如果您在数据建模器中将核心数据实体创建为它们自己的 NSManagedObject 子类,这通常效果最好,但如果没有它,它也可以工作。这样,所有机器生成的代码都可以保留在主 .h 和 .m 文件中,并且您的所有自定义代码都在该类中您的类别的 .h 和 .m 中。

【讨论】:

+1。通过使用类别,您可以在更改模型时清除并重建 Xcode 生成的实体标头和实现,同时仍保持您自己的自定义方法不受影响且安全。【参考方案2】:

我建议将这些方法添加到您的自定义 NSManagedObject 子类中。如果您担心在数据模型更改时维护访问器,同时保留您的自定义方法,我建议您查看“Wolf”Rentzsch 的mogenerator。许多人为了这个目的而对这个工具发誓。

【讨论】:

mogenerator 只是增加了项目的复杂性,让您远离实际的 CoreData 堆栈。只要您不依赖一堆实例变量等,类别是一种非常优雅的方式。 除了@BenLachman 提到的复杂性之外,它也不是一个伟大的设计。 NSManagedObject 子类中的方法应该直接与将模型持久化到 CoreData 和从 CoreData 持久化相关。他们不应该为表示层格式化数据。【参考方案3】:

您为实体创建自己的 NSManagedObject 子类。

在NSManagedObject documentation中有更好的解释

【讨论】:

我正在使用 .xcdatamodel 文件,它为我生成托管对象类。我的问题是关于使用自定义方法进一步自定义这个生成的类(它已经是 NSManagedObject 的子类),例如我原始帖子中的示例。谢谢! 查看您的数据建模器。在左上角,它列出了实体。它还列出了它所基于的类,默认情况下是 NSManagedObject。您可以将其更改为您自己的 NSManagedObjectS 子类的名称。 我一定是误会了什么。如果我创建一个 NSManagedObject 子类并将其用作我生成的类的基础,那么我就有这个层次结构:NSManagedObject :: Person :: PersonMO。 PersonMO 类包含我的属性,而 Person 类包含我的方法。但是,PersonMO 属性对 Person 方法不可见。 我认为你误会了。层次结构是 NSManagedObject

以上是关于向核心数据类添加自定义方法的主要内容,如果未能解决你的问题,请参考以下文章

三种cell的自定义的方法

Collection方法之二 向集合中添加自定义的元素

VFP问题 用户可以给表单添加自定义属性和方法程序???

我可以为现有的Ruby类添加自定义方法吗?

如何在 Laravel 5.6 中向资源控制器添加自定义方法

向用户 ASP.NET 身份添加自定义角色