替换 CoreData 实体中所有属性的 getter

Posted

技术标签:

【中文标题】替换 CoreData 实体中所有属性的 getter【英文标题】:Replace getter for all attributes in CoreData Entity 【发布时间】: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?

【问题讨论】:

【参考方案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 次。

以上是关于替换 CoreData 实体中所有属性的 getter的主要内容,如果未能解决你的问题,请参考以下文章

替换 CoreData 中的属性

为啥更改实体的属性时会删除我的 CoreData 信息?

删除 CoreData 实体中的所有记录

在 CoreData / SwiftUI 的实体中显示属性中的最高数字

CoreData 在一对多关系中编辑一个属性

RestKit + CoreData:操作成功时替换实体内容,失败时保持原样