Использование селекторов с NSPredicate - PullRequest
1 голос
/ 13 июля 2010

У меня есть объект, который содержит несколько разных строк NSStrings.При отображении этого объекта, в зависимости от другого атрибута объекта, я буду отображать ту или иную строку.У меня есть функция, определенная в объекте, которая решает, какую строку отображать.Итак, в качестве простого примера:

@interface MyObject : NSObject {
    NSString* string1;
    NSString* string2;
    NSString* string3;
    int stringNum;
}

-(NSString)getDisplayString {
    if(stringNum == 1) {
        return string1; 
    } else if (stringNum == 2) {
        return string2;
    } else if (stringNum == 3) {
        return string3;
    }
}

Теперь я хотел бы создать NSPredicate для поиска в массиве этих объектов.Можно ли создать такой, который будет искать по результатам getDisplayString?Очевидно, я мог бы, вероятно, повторить поведение getDisplayString в предикате, но тогда я удвою логику и, возможно, приведу к ошибке где-то внизу.

1 Ответ

0 голосов
/ 14 февраля 2011

Да.

NSPredicate *p = [NSPredicate predicateWithFormat:@"getDisplayString = %@", @"foo"];
NSArray *filtered = [arrayOfMyObjects filteredArrayUsingPredicate:p];

В качестве примечания, вы не должны ставить перед именем метода префикс get, если только вы не собираетесь возвращать значение byref через параметр out.Проверьте документацию для получения дополнительной информации.

...