Несколько NSP предикатов для одного значения массива в ios

В своих проектах я работаю в NSPredicate, я уже работал на один NSPredicate, но теперь мне нужно использовать несколько NSPredicate. Вот у меня есть один массив, из этого массива я хочу фильтровать по нескольким случаям,

У меня есть три флажка, как это, изначально все проверяются, когда я отменяю выбор зеленой кнопки означает, что она показывает только красные и желтые значения, а затем я отменяю выбор желтой означает, что она показывает только красное значение снова Я выбираю зеленый означает, что она показывает зеленые и красные значения

т.е.

1.Color is equal or not equal to Green.
2.Color is equal or not equal to Yellow.
3.Color is equal or not equal to Red.

В моем массиве есть комбинация этих трех цветов.

NSPredicate *filterRun,*filterNotProd,*filterStop,*filterR;

    if(isRun){
        filterRun = [NSPredicate predicateWithFormat:@"Color != [c] %@",GREEN_COLOR];
    }
    else{
        filterRun = [NSPredicate predicateWithFormat:@"Color == [c] %@",GREEN_COLOR];
    }

    if(isNotProd){
        filterNotProd = [NSPredicate predicateWithFormat:@"Color != [c] %@",YELLOW_COLOR];
    }
    else{
        filterNotProd = [NSPredicate predicateWithFormat:@"Color == [c] %@",YELLOW_COLOR];
    }


    if(isStop){
        filterStop = [NSPredicate predicateWithFormat:@"Color != [c] %@",RED_COLOR];
    }
    else{
        filterStop = [NSPredicate predicateWithFormat:@"Color == [c] %@",RED_COLOR];
    }
//        filterR = [NSPredicate predicateWithFormat:@"Color LIKE[c] %@",RED_COLOR];       

        NSLog(@"prediStr Runn %@ nnn %@ sss %@",filterRun,filterNotProd,filterStop);
        NSPredicate *compFilter=[NSCompoundPredicate andPredicateWithSubpredicates:@[filterRun,filterNotProd,filterStop]];
//        NSPredicate *compFilter=[NSCompoundPredicate orPredicateWithSubpredicates:@[filterRun,filterNotProd,filterStop]];

        NSMutableArray *filteredArr = [NSMutableArray arrayWithArray:[parkDetailsArr filteredArrayUsingPredicate:compFilter]];
        parkDetailsArr=[NSMutableArray arrayWithArray:filteredArr];

но это показывает только пустое значение.. помогите мне..

1 ответ

В Swift вы можете установить AND / OR NSP предикаты для фильтрации массива, так что вы можете только создать экземпляр NSCompoundPredicate учебный класс. Например, вы можете комбинировать и / или предикаты следующим образом:

let orPredicate:NSCompoundPredicate = NSCompoundPredicate(orPredicateWithSubpredicates: [NSPredicate(format: "petty_cash_description CONTAINS[cd] %@",str!),NSPredicate(format: "project.name CONTAINS[cd] %@",str!),NSPredicate(format: "payment_date CONTAINS %@",str!),NSPredicate(format: "amount == %f",number)])
let andPredicate = NSCompoundPredicate(andPredicateWithSubpredicates: [orPredicate,NSPredicate(format: "id != 0")])

Теперь у вас есть собственный предикат, который объединяет предикаты с AND / OR. В вашем случае установите пустой NSMutableArray (NSMutableArray *array = [NSMutableArray array];) в верхней части вашей функции, а затем создайте экземпляры предикатов для пустого добавления, когда вы комбинируете NSPredicates.

Другие вопросы по тегам