Как использовать NSPredicate для значений Key-Path

Использовать NSPredicate для массива довольно просто, используя filteredArrayUsingPredicate:.

Как это делается для значений key-path? Это означает, что у меня есть массив объектов (в данном случае объекты одного типа). Каждый объект имеет переменную экземпляра с именем name. Согласно документации, он говорит сделать следующее:

NSPredicate *predicate = [NSPredicate predicateWithFormat:
   @"ANY employees.firstName like 'Matthew'"];

Это также используется в filteredArrayUsingPredicate? Что делать, если у меня есть массив объектов People? означает ли это, что я бы использовал:

NSArray *allPeopleObjects; // pre-populated
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY people.name like 'Foo'"];
NSArray *matching = [allPeopleObjects filteredArrayUsingPredicate:predicate];

Документации в этом отделе немного не хватает.

Можно ли также использовать предикат против одного объекта Person? Что-то вроде Person.name содержит [cd] 'Foo'? Как это сделать?


person randombits    schedule 13.05.2010    source источник


Ответы (1)


Да, оба ваших примера будут работать отлично. NSPredicate может следовать путям ключ-значение. Если у вас есть один объект Person, почему бы вам просто не использовать valueForKeyPath: и не выполнить сравнение в коде вместо использования NSPredicate? В таком случае это кажется излишеством.

person Alex    schedule 13.05.2010
comment
Алекс, я не совсем уверен, что передать valueForKeyPath для одного объекта Person. Я имею в виду, что могу использовать NSRange, но мне было интересно, могу ли я сделать что-то вроде кода типа [person valueForKeyPath:@name like foo]. - person randombits; 14.05.2010