【问题标题】:Avoid repeating code in NSManagedObject categories避免在 NSManagedObject 类别中重复代码
【发布时间】:2025-08-15 14:50:02
【问题描述】:

在我的实体模型中,我有一个*“安装”实体,它有一个子“卡片”关系。我还有一个“Person”实体,它有一个子“卡片”关系。

我编写了一些代码,对卡片的 NSSet 进行排序以返回特定的子集(称为 sortedCards),该函数可以在安装级别或人员级别执行。

例如,我希望能够调用:

NSArray *cards = [installation sortedCards];

还有:

NSArray *cards = [person sortedCards];

我应该把这段代码放在哪里,这样我就不会在两个地方复制代码?我首先将它放在我创建的 Installation NSManagedObject 类别中。但如果我这样做,我还需要将代码复制到 Person 类别中。

我应该放入一个 NSSet 类别并调用 [installation.cards sortedCards] 和 [person.cards sortedCards] 吗?感觉也不对。

非常感谢任何帮助。

邓肯

【问题讨论】:

  • 您可以使用相同的 NSSet 类别。您还可以使用该方法创建一个抽象的 NSManagedObject 子类(如 MySortingManagedObject),然后让您的实体子类化它。
  • 放弃类别 %#*& 并使用子类。因为这就是你想要的,一个子类。请参阅mogenerator 了解如何简化此操作。

标签: ios objective-c core-data nsmanagedobject code-reuse


【解决方案1】:

您应该将此方法放在 NSSet 类别中,因为类别用于扩展基本功能。而如果你需要在不同的地方对 NSSet 进行排序,那应该是 NSSet 类工作,而不是其他对象或类。

【讨论】: