1

我的一个核心数据子类有一个NSSet. items取而代之的是(但并非总是,所以没有NSOrderedSet)有用的是,而不是检索一个有序的NSArray,所以我添加orderedItems到类中,对它们进行排序。

然后我遇到了性能问题,所以决定尝试缓存orderedItems. 我的计划是在课堂上使用 iVar,_cachedOrderedItems如果它不为空,我将返回它。

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

似乎我无法在类别本身中声明 iVar。如果我尝试将其放在核心数据类中,则无法在类别中访问它。

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

我也听说过 Mogenerator,如果有帮助,我会考虑学习使用它。

4

3 回答 3

1

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

于 2012-10-21T17:28:48.157 回答
1

只要您无法修改原始类(包括类别),就可以使用关联引用将 ivars 添加到类中。有关详细示例,请参阅使用关联引用在 Objective-C 类别中伪造实例变量

于 2012-10-21T16:41:43.283 回答
0

你绝对应该使用 mogenerator。参见例如http://importantshock.wordpress.com/2006/12/19/mogenerator-or-how-i-nearly-abandoned-core-data/

您可以在 XCode 中创建一个聚合目标,添加一个运行脚本,其中包含以下内容:

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

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

于 2012-10-21T20:54:18.673 回答