Core data 避免在自定义setter中提取

Core data 避免在自定义setter中提取,core-data,Core Data,我有两个实体,项目和类别。每个项目都有一个类别,一个类别可以有0到多个项目 我有一个特殊的类别,杂项类别。我用一个布尔属性isMisc来表示它,所以category.isMisc=YES 删除类别时,我希望将其任何项目重新分配到“杂项”类别。因此,我为项目编写了以下自定义设置程序: - (void)setCategory:(Category *)category { [self willChangeValueForKey:@"category"]; if (category ==

我有两个实体,项目和类别。每个项目都有一个类别,一个类别可以有0到多个项目

我有一个特殊的类别,杂项类别。我用一个布尔属性isMisc来表示它,所以category.isMisc=YES

删除类别时,我希望将其任何项目重新分配到“杂项”类别。因此,我为项目编写了以下自定义设置程序:

- (void)setCategory:(Category *)category
{
    [self willChangeValueForKey:@"category"];
    if (category == nil) {
        category = [Database theMiscCategory];
    }
    [self setPrimitiveValue:category forKey:@"category"];
    [self didChangeValueForKey:@"category"];
}
问题是,[Database theMiscCategory]执行提取,我认为这是不鼓励的。还有别的办法吗


我只考虑过让item.category=nil,但这在代码的其他方面引入了足够的复杂性,因此我更希望有一个“misc”类别。

您可以在程序中创建或获取“misc”类别对象一次,例如在创建托管对象上下文之后。然后自定义setter方法可以始终使用此实例


如果使用多个托管对象上下文,则必须为每个上下文创建一个对象

你不能在程序启动时提取一次“misc”类别,并始终使用该实例吗?或者您是否处理多个托管对象上下文?嘿@MartinR,这是个好主意。数据库类目前只是一组静态方法。我曾考虑过将其设置为单例,在这种情况下,我可以在初始化单例时进行提取。我可以成为静态成员吗?还是我必须放下我的屁股去创造单身?可能有很多可能的解决方案。只要只使用单个上下文,就可以保留
themisccegory
方法,但要更改它,使其将结果缓存在静态变量中。