你能解释Key path的各种用法吗?

时间:2012-02-01 14:37:57

标签: objective-c

我得到了一个我想要的结果(获得最大值。)在某人的帮助下使用了keypath功能。

代码:获取最大值

NSNumber *number1 = [[NSNumber alloc]initWithInt:10];
NSNumber *number2 = [[NSNumber alloc]initWithInt:20];
NSNumber *number3 = [[NSNumber alloc]initWithInt:30];
NSMutableArray *array = [[NSMutableArray alloc]initWithObjects:number1, number2, number3, nil];
NSNumber *result = [array valueForKeyPath:@"@min.intValue"];

我想知道keypath的各种用法。

以下是问题。

Q1)如何获得具有最大值int_test属性的实例?

Q2)如何在Just实例中获取int_test属性的最大值?

Just *test1 = [[Just alloc]init];
test1.int_test = 10;

Just *test2 = [[Just alloc]init];
test2.int_test = 20;

Just *test3 = [[Just alloc]init];
test3.int_test = 30;

NSMutableArray *array = [[NSMutableArray alloc]initWithObjects:test1, test2, test3, nil];

NSLog(@"%@",[array valueForKeyPath:@"?????"]); <= Q1)
NSLog(@"%d",[array valueForKeyPath:@"?????"]); <= Q2)

1 个答案:

答案 0 :(得分:0)

注意:未经测试的代码。理想情况下,我会在发布之前对其进行测试作为答案,但我现在没有时间这样做。我认为代码在概念上是正确的,但您可能需要调整它以使其工作。如果您发现任何错误,请告诉我,以便我做出必要的更正。

  

Q2)如何在Just实例中获取int_test属性的最大值?

使用此:

int max = [array valueForKeyPath:@"@max.int_value"].intValue;
  

Q1)如何获得具有最大值int_test属性的实例?

使用NSArray方法-indexOfObjectPassingTest:,如下所示:

int max = [array valueForKeyPath:@"@max.int_value"].intValue;
BOOL (^MaxTest)(id, NSUInteger, BOOL) = ^(id obj, NSUInteger idx, BOOL *stop) {
    BOOL isMax = NO;
    if (obj.int_test == max) {
        isMax = YES;
        *stop = YES;
    }
    return isMax;
}
NSUInteger testMaxIndex = [array indexOfObjectPassingTest:MaxTest];
Just testMax = [array objectAtIndex:testMaxIndex];