KVC小结

来源:互联网 发布:软件开发立项 编辑:程序博客网 时间:2024/06/05 08:44
           // 键值编码        // 设置//        [person setValue:@"Charles" forKey:@"name"];<pre name="code" class="objc">  NSMutableArray *cars = [NSMutableArray array];        for (int i =0;  i < 3; i++) {            Car *car =  [[Car alloc] initWithMile:100*(i+1) name:[NSString stringWithFormat:@"car%d",i]];            [cars addObject:car];        }                 Person *person = [[Person alloc] initWithName:@"charles" cars:cars];                // 车的数量        NSNumber *count;        count = [person valueForKeyPath:@"_cars.@count"];        NSLog(@"count = %@",count);                // 平均行程        NSNumber *avgMile;        avgMile = [person valueForKeyPath:@"cars.@avg.mile"];        NSLog(@"%@",avgMile);                // 总行程        NSNumber *sumMile;        sumMile = [person valueForKeyPath:@"cars.@sum.mile"];        NSLog(@"%@",sumMile);                    // 最大行程        NSNumber *maxMile;        maxMile = [person valueForKeyPath:@"cars.@max.mile"];        NSLog(@"%@",maxMile);                // 最小行程        NSNumber *minMile;        minMile = [person valueForKeyPath:@"cars.@min.mile"];        NSLog(@"%@",minMile);        //        得到所有car对象并存入数组中        NSArray *array;        array = [person valueForKeyPath:@"cars.@distinctUnionOfObjects.name"];        NSLog(@"%@",array);          Car *lastCar =  [[person valueForKeyPath:@"cars"] lastObject];        NSLog(@"%@",lastCar);                // 所有键        NSArray *keys = [NSArray arrayWithObjects:@"name",@"mile", nil];                // 得到所有键的对应的值        NSDictionary *dic = [lastCar dictionaryWithValuesForKeys:keys];        NSLog(@"dic = %@",dic);                        // 设置新键值对        NSDictionary *newCar = [NSDictionary dictionaryWithObjectsAndKeys:@"bmw",@"name",[NSNumber numberWithFloat:110],@"mile", nil];        // 更新键值对        [lastCar setValuesForKeysWithDictionary:newCar];        NSLog(@"newLastCar  = %@",lastCar);

// NSLog(@"%@",person.name); // 获取 - valueForKey: NSString *name = [person valueForKey:@"name"]; NSLog(@"%@",name); // valueForKey首先会寻找-name方法,如果没有这样的get方法,他会在对象内寻找名称格式为_key 或者key 的实例变量 // 通过使用KVC,没有相关的getter方法也会获取对象值,不是通过对象指针来直接访问示例变量 // - setValue: ForKey: [person setValue:@"yaoxin" forKey:@"name"]; // 首先会查找名称的setter方法,例如setName 然后调用它并传递参数 @“yaoxin” 如果不存在setter方法,他将会在类中寻找类名为name或_name的实例变量为其赋值 NSString *newName = [person valueForKey:@"name"]; NSLog(@"%@",newName);
        // 键路径        /**         *   没有添加任何访问方法或属性,看KVC是如何直接获取对象的         */                                Engine *engine = [[Engine alloc] init];        NSLog(@"horsePower = %@",[engine valueForKey:@"horsePower"]);                [engine setValue:[NSNumber numberWithInt:150] forKey:@"horsePower"];        NSLog(@"horsePower = %@",[engine valueForKey:@"horsePower"]);                // 如何表示这些键路径        Car *car = [[Car alloc] initWithEngine:engine];        [car setValue:[NSNumber numberWithInt:160] forKeyPath:@"_engine._horsePower"];        NSLog(@"horsePower =  %@",[car valueForKeyPath:@"_engine._horsePower"]);                


0 0