Не могли бы вы объяснить различные способы использования Key path? - PullRequest
1 голос
/ 01 февраля 2012

У меня был результат, который я хотел получить (получая максимальное значение.) С помощью функции 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) Как получить максимальное значениесвойства int_test в экземплярах Just?

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 голосов
/ 01 февраля 2012

Примечание: Непроверенный код впереди.В идеале, я бы проверил это перед публикацией в качестве ответа, но у меня нет времени, чтобы сделать это сейчас.Я считаю, что код является концептуально правильным, но вам может понадобиться настроить его, чтобы он заработал.Если вы обнаружите какие-либо ошибки, пожалуйста, дайте мне знать, чтобы я смог внести необходимые исправления.

Q2) Как получить максимальное значение свойства int_test в экземплярах Just?

Используйте это:

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

Q1) Как получить экземпляр с максимальным значением свойства int_test?

Использовать метод NSArray -indexOfObjectPassingTest: likeэто:

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];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...