Для доступа к базовым значениям управляемого объекта используются следующие два метода:
- (id) primitiveValueForKey: (NSString *) ключ
- (void) setPrimitiveValue: (id) значение forKey: (NSString *) ключ
Это часто используется для преобразования атрибутов NSNumber в их «реальный» тип, например свойство bool:
- (BOOL)isShared
{
[self willAccessValueForKey:@"isShared"];
NSNumber *underlyingValue = [self primitiveValueForKey:@"isShared"];
[self didAccessValueForKey:@"isShared"];
return [underlyingValue boolValue];
}
willAccessValueForKey:
и didAccessValueForKey:
требуются базовым классом управляемых объектов для обработки ошибок, отношений и т. Д.
И если вы в конечном итоге пишете установщик, вы должны также обернутьметод доступа в методах KVC:
- (void)setShared:(BOOL)isShared
{
NSNumber *newUnderlyingValue = [NSNumber numberWithBool:isShared];
[self willChangeValueForKey:@"isShared"];
[self setPrimitiveValue:newUnderlyingValue forKey:@"isShared"];
[self didChangeValueForKey:@"isShared"];
}
Сказав это, я лично не рекомендовал бы, чтобы у вас было то же имя метода, если у вас нет веской причины.Для «производных» значений вы, как правило, хотите создать новый метод с другим именем.Быстрый поиск и замена всего кода не займет много времени.
РЕДАКТИРОВАТЬ: добавлено willAccessValueForKey: / didAccessValueForKey: (спасибо jrturton)