替换 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的主要内容,如果未能解决你的问题,请参考以下文章