【问题标题】:Replace getter for all attributes in CoreData Entity替换 CoreData 实体中所有属性的 getter
【发布时间】:2014-04-16 10:02:41
【问题描述】:

在我的 CoreData 模型中,我有一个具有 20 个属性的实体 Article 和一个子实体 Variant,与 Article 具有一对一的关系“主”。所以Variant 具有Article 父类的所有属性,但我希望如果属性是nil,getter 应该返回主Article 之一。

在代码中:

- (NSString *)getSomeAttribute {

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

    return tmp;
}

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

【问题讨论】:

    标签: ios core-data


    【解决方案1】:

    你不能跳过 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"];
    }
    

    【讨论】:

    • 好主意,但出于可移植性和模块化的原因,我想避免使用单个 getter。我只是在玩运行时库,我正在尝试在运行时构建吸气剂,我会尽快通知你;)谢谢汤姆。
    • 如果你只需要做 20 次,我认为解决方案是剪切粘贴 20 次。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多