2012-02-01 10 views
1

誰かの助けを借りてキーパス機能を使って私が望んでいた(最高の価値を得た)結果が得られました。Key pathの使い方について説明しますか?

コード:私はキーパスの様々な使用方法について疑問最大値

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"]; 

を得ます。

以下は質問です。

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

注:先に未テストコード。理想的には、私は答えとして投稿する前にこれをテストしたいと思いますが、今はそれを行う時間がありません。私はコードが概念的に正しいと信じていますが、それを動作させるには、それを微調整する必要があります。エラーが見つかった場合は、必要な修正ができるようにお知らせください。

Q2)Justインスタンスでint_testプロパティの最大値を取得するにはどうすればよいですか? int_testプロパティの最大値を持つインスタンスを取得する方法)

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

Q1:

はこれを使用しますか?

このように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]; 
関連する問題