在哪些情况下,对象不符合键值编码?
-
18-09-2019 - |
题
目前,我正在学习有关键值编码的所有内容。
他们在文档中说:
关键路径序列中不符合键值编码的密钥路径序列中的任何对象都会接收一个ValueForundEfinedkey:消息。
我试图想象一个情况不符合键值编码的情况。那怎么会发生?当我为Uiview子群时,这显然合规,对吗?但是,当我只用nsobject作为超级阶级的对象,那怎么样?当我上没有超级阶级的课程时,那么肯定这不符合KV?
解决方案
如果您仔细阅读,您会看到它说“符合键值编码 对于适当的钥匙“。这意味着,基本上,您没有适当的KVC方法来供您要求的密钥。因此,如果我这样做 [[NSString stringWithString:@"foo"] valueForKey:@"dippingSauce"]
, ,它将落在 valueForUndefinedKey:
因为NSString对于密钥“ Dippingsauce”不符合KVC,它没有 dippingSauce
实例方法或 dippingSauce
伊瓦。
其他提示
它说:“这不是符合键值编码的 对于适当的钥匙。”这意味着
@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指南中的合规性。
不隶属于 StackOverflow