0

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

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

当我删除一个类别时,我想将它的任何项目重新分配给“misc”类别。所以我为项目编写了以下自定义设置器:

- (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,但这在代码的其他领域引入了足够的复杂性,我更愿意有一个“杂项”类别。

4

1 回答 1

1

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

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

于 2012-12-22T22:41:21.610 回答