Цель C - Фильтровать массив с предикатом - PullRequest
0 голосов
/ 14 сентября 2018

Итак, у меня есть NMMutableArray, который я пытаюсь отфильтровать с помощью searchBar, но безуспешно. Вместо публикации всего своего кода я создал проект, просто чтобы понять, как он работает, и все, что я нахожу в Интернете, не помогло мне понять это полностью

вот мой код:

- (void)viewDidLoad {
    [super viewDidLoad];

    NSMutableArray<Model*>* firstArry = [[NSMutableArray alloc] init];
    NSArray<Model*>* secondArry = [[NSMutableArray alloc] init];


    Model* p1 = [[Model alloc] init];
    p1.name = @"bob";
    p1.lastName = @"bdas";

    [firstArry addObject:p1];

    Model* p2 = [[Model alloc] init];
    p2.name = @"juny";
    p2.lastName = @"his";

    [firstArry addObject:p2];

    Model* p3 = [[Model alloc] init];
    p3.name = @"junay";
    p3.lastName = @"firs";

    [firstArry addObject:p3];

    Model* p4 = [[Model alloc] init];
    p4.name = @"bobov";
    p4.lastName = @"daskal";

    [firstArry addObject:p4];

    Model* p5 = [[Model alloc] init];
    p5.name = @"dima";
    p5.lastName = @"bonder";

    [firstArry addObject:p5];

    for (Model* name in firstArry){
        NSLog(@"%@",name.name);
    }

    NSString* filterWord = @"bo";

    NSPredicate* predicate = [NSPredicate predicateWithFormat:@"keywords.name CONTAINS[cd] %@",filterWord];
    secondArry = [firstArry filteredArrayUsingPredicate:predicate];


    if(secondArry.count > 0){
    for (Model* name in firstArry){
        NSLog(@"%@",name.name);
    }
    } else {
        NSLog(@"second arry is empty");
    }

}

Я хочу отфильтровать firstArry с заданным filterWord и получить новый массив с объектом, имя которого содержит свойство, которое он содержит, как это сделать и как это сделать.это работает?

1 Ответ

0 голосов
/ 14 сентября 2018

Левая сторона оператора CONTAINS[cd] - это объект, к которому будет применяться предикат, то есть firstArry.Если вы хотите фильтровать по name, ключ (путь) будет просто name.

NSPredicate* predicate = [NSPredicate predicateWithFormat:@"name CONTAINS[cd] %@",filterWord];
...