如果不先调用setValueForKey,我会得到什么价值?

时间:2015-03-03 02:40:33

标签: ios objective-c kvc

我在viewController中设置了3 UITextField

@property(nonatomic,retain) UITextField *line1;
@property(nonatomic,retain) UITextField *line2;
@property(nonatomic,retain) UITextField *line3;

我尝试获取密钥的值:

for (int i = 1; i <= 3; i++)
{
    NSString *fieldName = [NSString stringWithFormat:@"line%d",i ];
    UITextField *theField = [self valueForKey:fieldName];
    NSLog(@"TEXTFIELD : %@",theField);
}

我得到了所有UITextFields。

2015-03-03 10:32:32.776 KVCTEST[26691:1586602] TEXTFIELD : <UITextField: 0x7f9a00e1c5c0; frame = (50 120; 220 30); text = ''; clipsToBounds = YES; opaque = NO; layer = <CALayer: 0x7f9a00e1ae40>>
2015-03-03 10:32:32.777 KVCTEST[26691:1586602] TEXTFIELD : <UITextField: 0x7f9a00f1b920; frame = (50 160; 220 30); text = ''; clipsToBounds = YES; opaque = NO; layer = <CALayer: 0x7f9a00f1bb80>>
2015-03-03 10:32:32.777 KVCTEST[26691:1586602] TEXTFIELD : <UITextField: 0x7f9a00f1d330; frame = (50 200; 220 30); text = ''; clipsToBounds = YES; opaque = NO; layer = <CALayer: 0x7f9a00f1d590>>

但是,如果我将实例变量名称更改为例如LINE1LINE2LINE3,异常会提出。

默认情况下,键值编码是否会与ivar的名称相关联?我不必先setValueForKey

1 个答案:

答案 0 :(得分:0)

您可以在Apple documentation regarding KVC

中找到答案
  

键是一个标识对象特定属性的字符串。   通常,密钥对应于访问方法或名称   接收对象中的实例变量。密钥必须使用ASCII   编码,以小写字母开头,可能不包含   空格。