日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

IOS学习笔记七之KVC和Key路径

發布時間:2023/12/4 c/c++ 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 IOS学习笔记七之KVC和Key路径 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、KVC介紹

1)、KVC是由NSKeyValueCoding協議提供支持最基本的屬性和兩個方法如下

setValue:屬性值? forkey:屬性名:為指定屬性設置值

valueForKey:屬性名 ? (得到或者指定屬性的值)

?

?

2)、當設置value為nil的時候,我們需要在類的實現里面重寫setNilValueForKey方法,不然會拋出NSInvalidArgumentException

?

2、key路徑介紹

KVC除了操作對象的屬性之外,還可以操作對象的“復合屬性”,比如類里面的成員變量是對象,然后給這個成員變量的對象進行賦值,就這樣簡單理解,賦值之前一定要記得把這個對象進行初始化操作

KVC協議中為操作Key路徑的方法如下

?

setValue:forKeyPath:根據Key設置屬性值

valueForKeyPath:根據key的路徑獲取屬性值

?

2、測試簡單Demo

User.h #ifndef User_h #define User_h #import <Foundation/Foundation.h> @interface User : NSObject @property (nonatomic) NSString *name; @property (nonatomic, strong) NSString *city; @property (nonatomic, copy) NSString *add; @property NSString *pass; @property NSDate *birth; @property NSDate *birth1; @end #endif /* User_h */

?

User.m

?

#import <Foundation/Foundation.h> #import "User.h"@implementation User @synthesize name = _name; @synthesize pass; @synthesize birth; -(void) setName:(NSString *)name {self->_name = [NSString stringWithFormat:@"hello%@", name]; } @end

?

KVCPerson.h

?

#ifndef KVCPerson_h #define KVCPerson_h #import <Foundation/Foundation.h> #import "User.h"@interface KVCPerson : NSObject @property (nonatomic, copy) NSString *name; @property (nonatomic, copy) NSString *pass; @property (nonatomic, copy) NSDate *birth; @property (nonatomic) int price; @property (nonatomic) User *user; @end #endif /* KVCPerson_h */

?

?

?

?

KVCPerson.m

#import <Foundation/Foundation.h> #import "KVCPerson.h" @implementation KVCPerson-(void)setNilValueForKey:(id)key {if ([key isEqualToString:@"price"]){_price = 0;}else{[super setNilValueForKey:key];} }@end

?

?

?

main.m

#import <UIKit/UIKit.h> #import "AppDelegate.h" #import "Person.h" #import "Apple.h" #import "User.h" #import "Args.h" #import "KVCPerson.h" #import "FKItem.h" #import "FKOrder.h"int main(int argc, char * argv[]) {@autoreleasepool {KVCPerson *person = [KVCPerson new];[person setValue:@"chenyu" forKey:@"name"];[person setValue:@"1234" forKey:@"pass"];[person setValue:[NSDate date] forKey:@"birth"];NSLog(@"name is %@", [person valueForKey:@"name"]);NSLog(@"pass is %@", [person valueForKey:@"pass"]);NSLog(@"birth is %@", [person valueForKey:@"birth"]);NSLog(@"price is %@", [person valueForKey:@"price"]);[person setValue:nil forKey:@"name"];[person setValue:nil forKey:@"price"];NSLog(@"name is %@", [person valueForKey:@"name"]);NSLog(@"pass is %@", [person valueForKey:@"pass"]);NSLog(@"birth is %@", [person valueForKey:@"birth"]);NSLog(@"price is %@", [person valueForKey:@"price"]);[person setValue:[User new] forKeyPath:@"user"];//在使用valueForKeyPath之前一定要記得把成員對象進行初始化,不然直接設置無效[person setValue:@"hello" forKeyPath:@"user.city"];NSLog(@"user.city is%@", [person valueForKeyPath:@"user.city"]);} }

?


3、運行結果

?

name is chenyu pass is 1234 birth is Fri Jul 6 22:39:34 2018 price is 0 name is (null) pass is 1234 birth is Fri Jul 6 22:39:34 2018 price is 0 user.city is hello
?

4、總結

在使用key的時候,一定要記得先把成員屬性的對象進行初始化,不然設置無效

如下

[person setValue:[User new] forKeyPath:@"user"];//在使用valueForKeyPath之前一定要記得把成員對象進行初始化,不然直接設置無效[person setValue:@"hello" forKeyPath:@"user.city"];NSLog(@"user.city is%@", [person valueForKeyPath:@"user.city"]);

而不是

[person setValue:@"hello" forKeyPath:@"user.city"];NSLog(@"user.city is%@", [person valueForKeyPath:@"user.city"]);

這樣結果會是null

?

?

總結

以上是生活随笔為你收集整理的IOS学习笔记七之KVC和Key路径的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。