我得到了一个我想要的结果(获得最大值。)在某人的帮助下使用了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)
答案 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];