我有两个从实体派生的NSManagedObject子类ActivityMember和Member。成员具有一个称为名称的属性,而 Activity 成员通过与成员一对一的关系具有一个称为成员的属性。我试图在ActivityMember上创建一个名为name的自定义属性,该属性仅公开其成员的姓名,如下所示:
ActivityMember.m:
-(NSString *)memberName
{
if (!self.member) {
return nil;
}
return self.member.name;
}
ActivityMember.h:
@property (readonly) NSString *memberName;
当我的TableViewController子类将valueForKey:发送到ActivityMember的实例时,它失败并显示以下消息:
[<NSManagedObject 0x4d6c830> valueForUndefinedKey:]: the entity ActivityMember is not key value coding-compliant for the key "memberName".
如果我向ActivityMember添加一个临时memberName属性,它不会再失败,但是memberself属性始终为nil,即使self.member.name评估为有效字符串。
考虑到临时属性可能需要一些自动更新,因此我还向ActivityMember添加了以下内容,但没有成功。
+ (NSSet *)keyPathsForValuesAffectingMemberName
{
return [NSSet setWithObjects:@"member.name", nil];
}
NSManagedObject是否有可能做自己的KVO魔术?我在keyPathsForValuesAffectingMemberName的正文中设置了一个断点,但是它从未中断过。
这似乎是一个普通的用例,但是我没有找到关于该主题的好文章。
最佳答案
原来这是飞行员错误。在我的数据模型中,我没有为ActivityMember指定类名。微妙,因为其他属性效果很好(反射的魔力)。
关于ios - 带有KVO的iOS核心数据-valueForKey:NSManagedObject子类上的自定义属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6191140/