kvc
2018-12-25 本文已影响0人
yxibng
kvc
底层驱动NSKeyValueCoding
协议
NSKeyValueCoding
Getting Values
- valueForKey:
- valueForKeyPath:
- dictionaryWithValuesForKeys:
- valueForUndefinedKey:
Setting Values
- setValue:forKey:
- setValue:forKeyPath:
- setValuesForKeysWithDictionary:
- setNilValueForKey:
- setValue:forUndefinedKey:
ValidateValue
- validateValue:forKey:error:`
- validateValue:forKeyPath:error:`
一些总结
- 支持kvc的类需要实现NSKeyValueCoding协议,继承自
NSObject
的类,默认已经实现了协议的方法,直接支持kvc,你可以重写这些方法,提供自己的实现。 - 可以修改公开属性,也可以修改私有属性,私有的成员变量
- 访问一个不存在的key的值,
- valueForUndefinedKey:
会抛出NSUndefinedKeyException
异常,要重写这个方法,做一些自己的处理 - 修改一个不存在的key的值,
- setValue:forUndefinedKey:
会抛出NSUndefinedKeyException
异常,要重写这个方法,做一些自己的处理 -
setNilValueForKey:
去设置一个标量(如int, float, struct)的时候,会抛出NSInvalidArgumentException
异常,要重写这个方法,提供自己的处理(提供默认值或者生成一个值) - 设置一个标量属性的值得时候,需要转换为
NSValue
-
+(BOOL)accessInstanceVariablesDirectly
- 返回NO,禁止直接访问成员变量
- 返回YES,可以直接访问成员变量
- 对集合对象的方便操作
- Aggregation Operators
- @avg
- @count
- @max
- @min
- @sum
- Array Operators
- @distinctUnionOfObjects
- @unionOfObjects
- Nesting Operators
- @distinctUnionOfArrays
- @unionOfArrays
- @distinctUnionOfSets
- Aggregation Operators
示例代码
参考kvc_kvo