Несколько 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.