Objective c 核心数据、IVAR和类别

Objective c 核心数据、IVAR和类别,objective-c,ios,cocoa,core-data,categories,Objective C,Ios,Cocoa,Core Data,Categories,我的一个核心数据子类有一个NSSet的项。取而代之的是检索一个有序的NSArray,这通常(但并非总是如此,因此没有NSOrderedSet)是有用的,因此我在类中添加了orderedItems,对它们进行排序 然后我遇到了性能问题,所以决定尝试缓存orderedItems。我的计划是在类中使用iVar,\u cachedOrderedItems,如果它不为null,我将返回它 我对类别的使用带来了障碍。我读了一些关于将所有自定义代码放在一个类别中的好建议,以便在必要时可以重新生成核心数据类,而

我的一个核心数据子类有一个
NSSet
项。取而代之的是检索一个有序的
NSArray
,这通常(但并非总是如此,因此没有
NSOrderedSet
)是有用的,因此我在类中添加了
orderedItems
,对它们进行排序

然后我遇到了性能问题,所以决定尝试缓存
orderedItems
。我的计划是在类中使用iVar,
\u cachedOrderedItems
,如果它不为null,我将返回它

我对类别的使用带来了障碍。我读了一些关于将所有自定义代码放在一个类别中的好建议,以便在必要时可以重新生成核心数据类,而不会丢失所有自定义设置。其中一个定制是
orderedItems
方法

似乎我无法在类别本身中声明iVar。如果我试着把它放在核心数据类中,我就不能在类别中访问它

我是否需要将自定义代码移回核心数据类?还是我遗漏了什么


<>我也听说过Mogenerator,如果有帮助的话,我会考虑使用它。

你可以在任何时候不能修改原始类,包括类别中,将IVAR添加到一个类中。有关详细示例,请参见。

您拥有该类,因此可以使用类延续(已讨论)而不是类别。这允许您添加实例变量

您绝对应该使用mogenerator。例如,见

您可以在XCode中创建聚合目标,添加具有以下内容的运行脚本:

mogenerator -m path/to/your/datamodel.xcdatamodeld/version.xcdatamodel --template-var arc=true -M /CoreData/Generated -H /CoreData

对于每个
NSManagedObject
,您都会得到一个类和一个子类。更新数据模型时,再次运行脚本,基类将被更新,保留对托管对象子类所做的所有更改。删除无弧的
--template var arc=true

也许我应该为我的自定义代码使用子类而不是类别?