Причина, по которой вы получаете эту ошибку, заключается в том, что предикат применяется к каждому объекту в myArray
, и эти объекты, очевидно, не поддерживают ключевой путь @min.score
.NSPredicate поддерживает хотя бы некоторые операторы сбора данных.Вот простой пример, который работает:
NSDictionary *d1 = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:35] forKey:@"score"];
NSDictionary *d2 = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:52] forKey:@"score"];
NSDictionary *d3 = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:13] forKey:@"score"];
NSDictionary *d4 = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:19] forKey:@"score"];
NSArray *array = [NSArray arrayWithObjects:d1, d2, d3, d4, nil];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF.score == %@.@min.score", array];
NSLog(@"Min dictionaries: %@", [array filteredArrayUsingPredicate:predicate]);
Вы можете видеть, что в этом случае путь к ключу @min.score
применяется к массиву, что имеет смысл.Выходными данными является массив, содержащий один словарь, содержащий минимальное значение:
Min dictionaries: (
{
score = 13;
}
)