Основные данные IOS с помощью KVO-valueForKey: для пользовательского свойства подкласса NSManagedObject?


У меня есть два подкласса NSManagedObject, производные от сущностей ActivityMember и Member. Член имеет свойство с именем name, и ActivityMember, через один на один с членом, имеет свойство членов. Я пытаюсь создать пользовательское свойство ActivityMember с именем name, которое просто предоставляет имя своего члена, например:

ActivityMember.М:

-(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".

Если я добавляю временный атрибут member к ActivityMember, это больше не приводит к сбою, но свойство memberName всегда равно nil, даже если self.member.name возвращает допустимую строку.

Думая, что переходные атрибуты могут нуждаться в некотором автоматическом обновлении, я также добавил следующее К ActivityMember, без успеха.

+ (NSSet *)keyPathsForValuesAffectingMemberName
{
    return [NSSet setWithObjects:@"member.name", nil];
}

Возможно ли, что NSManagedObject делает свою собственную магию кво? Я установил точку останова внутри тела keyPathsForValuesAffectingMembername, но он никогда не ломался.

Это похоже на обычный случай использования, но я не нашел хорошего поста на эту тему.

1 2

1 ответ:

Это оказалось ошибкой пилота. В моей модели данных я не указал имя класса для ActivityMember. Тонко, так как другие свойства работали отлично (магия отражения).