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
。也许我应该为我的自定义代码使用子类而不是类别?