首页 > 解决方案 > Objective C - 带有谓词的过滤器数组

问题描述

所以我有一个 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");
    }

}

我想用给定的 filterWord 过滤 firstArry 并获取一个新数组,其中包含他们命名的属性包含它的对象,如何做到这一点以及它是如何工作的?

标签: objective-cnspredicate

解决方案


运算符的左侧CONTAINS[cd]是将要应用谓词的对象,即firstArry. 如果您想按namekey(path) 过滤,只需name.

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

推荐阅读