避免在自定义setter中进行提取

时间:2012-12-22 19:37:15

标签: core-data

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

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

当我删除某个类别时,我想将其任何项目重新分配给“misc”类别。所以我为item编写了以下自定义setter:

- (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”类别。

1 个答案:

答案 0 :(得分:1)

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

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