Причина, по которой он не использует ivars, заключается в том, что эти данные отсутствуют. Когда вы загружаете объект, он может не ошибаться во всех своих данных. ivars - это просто переменные, если вы и напишите в них, NSManagedObject не сможет ошибиться в значении, если оно еще не было загружено. Через средства доступа NSManagedObject имеет дроссельную точку, которая позволяет ему считывать данные с диска, если они еще не были сбиты, что означает, что ваш граф объектов может быть перенесен лениво. В противном случае вам нужно будет ввести каждый связанный объект.
Из-за этого вы не можете просто добавить ivars, у них не будет желаемых значений. Точно так же вы не можете изменить с @dynamic на @synthesized, все будет работать неправильно. Реализации динамических свойств, предоставляемые CoreData, полностью совместимы с KVC и KVO.
Если вы хотите получить доступ к значениям без отключения KVO или KVC, вы можете получить доступ к «примитивным» значениям. Вы делаете это одним из двух способов. Вы используете primitiveValueForKey: и setPrimitive: valueForKey: или вы можете просто объявить примитив и позволить CD предоставлять динамические реализации (из документации )
@interface Department : NSManagedObject
{
}
@property(nonatomic, retain) NSString *name;
@end
@interface Department (PrimitiveAccessors)
- (NSString *)primitiveName;
- (void)setPrimitiveName:(NSString *)newName;
@end