我的一个核心数据子类的NSSet
为items
。通常(但并非总是如此,因此没有NSOrderedSet
)对于检索有序NSArray
非常有用,因此我将orderedItems
添加到类中,对其进行排序。
然后我遇到了性能问题,所以决定尝试缓存orderedItems
。我的计划是在类中使用iVar _cachedOrderedItems
,如果它不为null,我将返回。
这个障碍伴随着我对类别的使用。我读了一些关于将所有自定义代码放在一个类别中的好建议,以便我可以在必要时重新生成核心数据类,而不会丢失所有自定义。其中一个自定义是orderedItems
方法。
我似乎无法在类别中声明iVar。如果我试着把它放在核心数据类中,我就无法在类别中访问它。
我是否需要将自定义代码移回核心数据类?或者我错过了什么?
我也听说过Mogenerator,并会考虑学习使用它,如果有帮助的话。
答案 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
无弧。