核心数据,iVars和类别

时间:2012-10-21 16:31:40

标签: objective-c ios cocoa core-data categories

我的一个核心数据子类的NSSetitems。通常(但并非总是如此,因此没有NSOrderedSet)对于检索有序NSArray非常有用,因此我将orderedItems添加到类中,对其进行排序。

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

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

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

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

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

3 个答案:

答案 0 :(得分:1)

您可以使用associative references在任何时候修改原始课程(包括类别)中将ivars添加到课程中。有关详细示例,请参阅Faking instance variables in Objective-C categories with Associative References

答案 1 :(得分:1)

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

答案 2 :(得分: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,您将获得一个类和一个子类。更新datamodel时,再次运行脚本并更新基类,保留对托管对象子类所做的所有更改。删除--template-var arc=true无弧。