KVC中setValuesForKeysWithDictionary:


本人視頻教程系列

 

從字典映射到一個對象,這是KVC中的一個方法所提供的,這個方法就是 setValuesForKeysWithDictionary: ,非常好用,不需要你來一一的給對象賦值而直接從字典初始化即可,但用的不好會經常崩潰,本教程就來討論這些使用的細節.

首先,先初始化一個字典,如下所示:

-------------------------------------------------------------------------------------

    NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:
                         @"Y.X.",  @"name",
                         @"26",    @"age",
                         @"海淀區", @"address", nil];

-------------------------------------------------------------------------------------

創建PersonInfoModel,代碼如下所示

-------------------------------------------------------------------------------------

#import <Foundation/Foundation.h>

@interface PersonInfoModel : NSObject

@property (nonatomic, strong) NSString  *name;
@property (nonatomic, strong) NSString  *age;
@property (nonatomic, strong) NSString  *address;

@end

-------------------------------------------------------------------------------------

#import "PersonInfoModel.h"

@implementation PersonInfoModel

@end

-------------------------------------------------------------------------------------

測試后打印信息如下:

以上是很標准的使用方法,我們再在屬性中添加 other,如下圖所示:

也沒有出錯,可以正常使用,也就是說用字典初始化對象時,只要對象中都包含了這些鍵值,是可以正常初始化的,我們再在字典中添加一個鍵值對,如下圖所示:

直接導致程序崩潰,因為該對象中沒有 sex 這個屬性,解決方法就是,實現一個方法setValue:forUndefinedKey:,如下圖所示:

這樣子就會過濾掉給不存在的鍵值賦值,如果有個屬性是id,而id本身就是系統自身關鍵字,不能夠當做屬性使用,怎么辦?

 

結論:

setValue:forUndefinedKey:這個方法是關鍵,只有存在這個方法后,才可以過濾掉不存在的鍵值對而防止崩潰,同時,setValue:forUndefinedKey:這個方法中還可以改變系統的敏感字,或者,你手動的映射key值不同的值,隨你自己喜歡.

 

附錄:

哥教你一個一勞永逸的方式來處理這種映射到錯誤鍵值而導致崩潰的問題,首先,你先繼承至 NSObject 類,實現方法setValue:forUndefinedKey:

 

然后,你新建一個model,繼承至 YXModel 類,如下圖所示:

然后使用,請注意,其有一個值為null,因為沒有這個myID的鍵值嘛.

解決方法,重載父類的setValue:forUndefinedKey:,然后實現以下替換,即可.

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM