美文网首页iOS开发之笔记摘录
iOS基础 之 KVC键值编码

iOS基础 之 KVC键值编码

作者: 平安喜乐698 | 来源:发表于2017-09-20 14:02 被阅读60180次
目录


1. KVC键值编码(k:键 V:值 C:编码)

是一种通过属性名间接访问属性的方式。

NSObject(NSKeyValueCoding)分类中定义了KVC相关方法

使用

    PersonModel *personM=[PersonModel new];
    
    // 首先 查找set方法->若没有则查找变量->若还没有则调用setValueforUndefinedKey->若没实现setValueforUndefinedKey则崩溃
    [personM setValue:@"张三丰" forKey:@"name"];
    // 首先 查找get方法->若没有则查找变量->若还没有则调用valueforUndefinedKey->若没实现valueforUndefinedKey则崩溃
    NSString *name=[personM valueForKey:@"name"];

    // 多级路径
    [personM setValue:@"" forKeyPath:@"dog.name"];
    int dogAge=[personM valueForKeyPath:@"dog.age"];

注意

    当非类类型属性使用setValue设置为nil时会调用setNilValueForKey方法,并引发NSInvalidArgumentException导致崩溃
    [[Person new]setValue:nil forKey:@"likeNum"];
解决
    // 覆写这个空方法既可避免崩溃(给类类型设置nil不会调用该方法)
    -(void)setNilValueForKey:(NSString *)key{
    }
PersonModel.h
#import <Foundation/Foundation.h>
@interface PersonModel : NSObject
@property (nonatomic,copy) NSString *name;
@property (nonatomic,assign) int likeNum;
@end


PersonModel.m
#import "PersonModel.h"
@implementation PersonModel

// 初始化(用于将字典转换为模型)
-(instancetype)initWithDic:(NSDictionary *)dic{
    self=[super init];
    if(self){
        // 给模型所有属性赋值(等价于循环setValueForKey给属性赋值)
        [self setValuesForKeysWithDictionary:dic];
    }
    return self;
}

// 找不到键时调用
-(void)setValue:(id)value forUndefinedKey:(NSString *)key{}

// 覆写以下方法 做额外操作 (一般不需要)
-(void)setValue:(id)value forKey:(NSString *)key{
    [super setValue:value forKey:key];
}
-(void)setValue:(id)value forKeyPath:(NSString *)keyPath{
    [super setValue:value forKeyPath:keyPath];
}
-(void)setValuesForKeysWithDictionary:(NSDictionary<NSString *,id> *)keyedValues{
    [super setValuesForKeysWithDictionary:keyedValues];
}
@end

相关文章

  • iOS开发--KVC

    KVC键值编码 首先我们先了解下什么是KVC:KVC:Key Value Codeing 键值编码,ios提供的一...

  • iOS基础 之 KVC键值编码

    1. KVC键值编码(k:键 V:值 C:编码) 是一种通过属性名间接访问属性的方式。 NSObject(NS...

  • iOS 中的 KVC和KVO简介

    1. KVC 1.1 KVC介绍 KVC 是 Key Value Coding 的缩写,即键值编码。在iOS的开发...

  • 2.2 KVC和KVO详解

    image.png KVC KVC定义 KVC(Key-value coding)键值编码,就是指iOS的开发中,...

  • ios开发UI篇—Kvc简单介绍

    一、KVC简单介绍 KVC key valued coding 键值编码 KVC通过键值间接编码 补充: 与KVC...

  • iOS之KVC字典转模型的底层实现

    KVC: Key Value Coding (键值编码) 在iOS开发中,KVC是我们经常要使用的技术.那么KVC...

  • iOS 键值编码 KVC

    KVC KVC -- Key Value Coding 键值编码 键值编码的基本概念键值编码是一个用于简介访问对象...

  • iOS中KVC使用及原理解析

    什么是KVC? KVC即Key-Value Coding,意思键-值编码。iOS中键值编码机制是一种由NSKeyV...

  • OC-KVC

    KVC是什么 kvc就是Key-Value Coding(键值编码)。 键值编码是NSKeyValueCoding...

  • iOS中的KVC与KVO,NSNotification通知

    问题: 什么是键值编码KVC,键路径是什么? 什么是键值观察KVO? 键值编码KVC: 键值编码是一种在NSKey...

网友评论

    本文标题:iOS基础 之 KVC键值编码

    本文链接:https://www.haomeiwen.com/subject/sdcosxtx.html