标签:
//为对象p添加一个监听者 //Observer: 监听者 //KeyPath: 属性名(需要监听哪个属性) //options: 监听的哪些选项 [p addObserver:self forKeyPath:@"name" options:kNilOptions context:@"test"];
keyPath: 哪个属性被改了 object: 哪个对象的属性被改了 change: 改成什么样子 context: 当初addObserver时的context参数值
Person *p = [[Person alloc] init]; Dog *dog = [[Dog alloc] init]; [p setValue:@"wangcai" forKeyPath:@"dog.name"];//正确 [p setValue:@"wangcai" forKey:@"dog.name"];//错误 + forKeyPath可以用来修改模型对象的私有成员变量 [p setValue:@"test" forKeyPath:@"_name"];//正确,直接修改成员变量
HMJBook *book1 = [[HMJBook alloc] init]; book1.name = @"1"; book1.price = 12; HMJBook *book2 = [[HMJBook alloc] init]; book2.name = @"2"; book2.price = 15; HMJBook *book3 = [[HMJBook alloc] init]; book3.name = @"3"; book3.price = 22; NSArray *books = @{book1, book2, book3}; //取得books数组中所有HMJBook对象的name属性值,放在一份新的数组中返回 NSArray *names = [books valueForKeyPath:@"name"]; //等同于 NSArray *names = [p.books valueForKeyPath:@"name"]; //等同于 NSArray *names = [p valueForKeyPath:@"books.name"]; //计数 NSLog(@"%@", [p.books valueForKeyPath:@"@count"]); //计数 NSLog(@"%@", [p valueForKeyPath:@"books.@count"]); //最大价格 NSLog(@"%@", [p.books valueForKeyPath:@"@max.price"]); //平均值 NSLog(@"%@", [p.books valueForKeyPath:@"@avg.price"]); //平均值 NSLog(@"%@", [p valueForKeyPath:@"books.@avg.price"]);
标签:
原文地址:http://www.cnblogs.com/HMJ-29/p/4758674.html