替换核心数据实体中所有属性的getter

时间:2014-04-16 10:02:42

标签: ios core-data

在我的CoreData模型中,我有一个具有20个属性的实体Article和一个子实体Variant,其中一对一关系为“master”到Article。因此Variant具有Article父类的所有属性,但我希望如果属性为nil,则getter应返回主Article的一个。

在代码中:

- (NSString *)getSomeAttribute {

    NSString *tmp = self.someAttribute;
    if (tmp == nil)
        tmp = self.master.someAttribute;

    return tmp;
}

我不想写这样的20个getter,有没有办法一次为所有属性写一个“通用”getter?

1 个答案:

答案 0 :(得分:0)

您不能跳过getter,因为如果您不实现它们,Core Data将生成它们。您可以做的是将所有自定义代码分解为一个核心方法,并让其他getter调用它。你仍然最终得到一堆吸气剂,但他们只是单线。这样的事情(警告,输入网页浏览器而不是编译):

- (id)valueForKeyFromSelfOrMaster:(NSString *)key
{
    [self willAccessValueForKey:key];
    id value = [self primitiveValueForKey:key];
    [self didAccessValueForKey:key];

    if (value == nil) {
        value = [self.master valueForKey:key];
    }
    return value;
}

- (NSString *)someAttribute
{
    return [self valueForKeyFromSelfOrMaster:@"someAttribute"];
}