В нем написано, что «это не соответствует кодированию значения ключа для соответствующего ключа ». Что это значит, что
@interface MyObject : NSObject {
NSString *foo;
NSString *bar;
}
@property (nonatomic, retain) NSString *foo;
@property (nonatomic, retain) NSString *bar;
@end
@interface MyObject
@synthesize foo;
@synthesize bar;
@end
Соответствует "foo" и "bar", но не "baz."
Для простых свойств, которые есть в нем, по умолчанию все подклассы NSObject реализуют базовый KVC. С коллекциями становится сложнее. Для того, чтобы KVC работал правильно для коллекций (так что вы можете сделать что-то вроде:
NSArray *people = ... ;
NSArray *firstNames = [people valueForKey:@"firstName"];
Это требует от вас реализации определенных дополнительных методов. В целом, крупнейшим пользователем этой функциональности являются привязки Какао (которые недоступны на iPhone), полученные из CoreData (который в любом случае генерирует эти дополнительные методы сбора данных), поэтому обычно они обрабатываются в основном автоматически. Как правило, люди не заботятся о полной поддержке KVC словарей или массивов в своих объектах, если только они не собираются на самом деле их выставлять. Вы можете прочитать о соответствии в руководстве KVC.