KVO-valueForKey的IOS核心数据:用于NSManagedObject子类上的自定义属性



我有两个从实体派生的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指定类名。微妙,因为其他特性都很好(反射的魔力)。

最新更新