我有两个从实体派生的NSManagedObject子类,ActivityMember和Member。Member具有名为name的属性,ActivityMember通过与Member的一对一关系具有名为Member的属性。我正试图在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".
如果我将临时memberName属性添加到ActivityMember,它将不再失败,但memberName特性始终为nil,即使self.member.name的计算结果为有效字符串。
考虑到瞬态属性可能需要一些自动更新,我还向ActivityMember添加了以下内容,但没有成功。
+ (NSSet *)keyPathsForValuesAffectingMemberName
{
return [NSSet setWithObjects:@"member.name", nil];
}
NSManagedObject有可能发挥自己的KVO魔力吗?我在keyPathsForValuesAffectingMemberName的主体中设置了一个断点,但它从未中断。
这似乎是一个常见的用例,但我还没有找到一个关于这个主题的好帖子。
这是一个飞行员错误。在我的数据模型中,我没有为ActivityMember指定类名。微妙,因为其他特性都很好(反射的魔力)。