我有两个实体,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”类别。
答案 0 :(得分:1)
您可以在程序中创建或获取“misc”类别对象,例如在创建托管对象上下文之后。然后您的自定义setter方法始终可以使用此实例。
如果使用多个托管对象上下文,则必须为每个上下文创建一个对象。