0xc*_*ced 10 cocoa-touch key-value-coding uikit
运行这个:
@try
{
NSLog(@"1. autocapitalizationType = %d", [self.textField autocapitalizationType]);
NSLog(@"2. autocapitalizationType = %@", [self.textField valueForKey:@"autocapitalizationType"]);
}
@catch (NSException *exception)
{
NSLog(@"3. %@", exception);
}
Run Code Online (Sandbox Code Playgroud)
输出:
1. autocapitalizationType = 0
3. [<UITextField 0x6c15df0> valueForUndefinedKey:]: this class is not key value coding-compliant for the key autocapitalizationType.
Run Code Online (Sandbox Code Playgroud)
我在期待:
1. autocapitalizationType = 0
2. autocapitalizationType = 0
Run Code Online (Sandbox Code Playgroud)
只有作为UITextInputTraits协议一部分的属性才会发生此异常.可以访问此类的常规属性.UITextFieldclearButtonModevalueForKey:
那么为什么不能通过UITextInputTraits键值编码访问属性呢?
如果你深入研究 UIKit 框架并打开UITextField.h,你会发现:
@interface UITextField : UIControl <UITextInput, NSCoding> {
@private
UITextInputTraits *_traits;
UITextInputTraits *_nonAtomTraits;
Run Code Online (Sandbox Code Playgroud)
您还会发现,它在 UITextField 头文件中clearButtonMode被声明为 a ,但它(以及协议的其余部分)却没有。@propertyautocapitalizationTypeUITextInputTraits
你和我都看不到UITextField.m,所以我们真正能得出的结论是,Apple 以不符合 KVC 的方式实现了该UITextField协议UITextInputTraits。据推测,某处的粘合代码会转换[myTextField autocapitalizationType]为适当的值,但无论发生什么幕后魔法,都会停止valueForKey:。
| 归档时间: |
|
| 查看次数: |
1493 次 |
| 最近记录: |