У меня есть основные модели данных и хранилища данных для устройств. Каждое устройство содержит цвета, хранилище и цену. Есть ли в любом случае я могу отфильтровать уже запрос выборки (массив всех устройств из БД). Мне нужно реализовать функциональность фильтра для устройств, содержащих цвет, хранение и цену. Фильтр может применяться несколько раз. Это означает, что после применения фильтра к цвету будут отображаться только те устройства, которые содержат этот цвет + соответствующие хранилища и наоборот. Я могу отфильтровать его один раз, используя предикаты, но для применения другого фильтра мне нужно снова вызвать запрос для получения всех устройств и применения уважаемого фильтра. Есть ли какой-то другой способ, поэтому, когда я получаю отфильтрованные данные из запроса на выборку, я могу применить другой фильтр к тем же отфильтрованным данным. или как я делаю это единственный способ работать с основными данными.
Вот как я фильтрую свои данные на основе выбранного фильтра:
-(void)getAllDevicesDetailBasedOnFilter{
NSMutableArray *predicateArray = [NSMutableArray array];
//DevicesCatalogueSkuDetails
isColorSelected = YES;
isBrandSelected = YES;
isStorageSelected = YES;
isPriceSelected = YES;
if (isPriceSelected) {
NSPredicate * pricePredicate = [NSPredicate predicateWithFormat:@"ANY skuDetails.priceWithVat >= %.f AND ANY skuDetails.priceWithVat <= %.f",minimumPriceValue,maximumPriceValue];
[predicateArray addObject:pricePredicate];
}
if (isBrandSelected) {
NSPredicate * brandPredicate = [NSPredicate predicateWithFormat:@"brand = %@", @"Samsung"];
[predicateArray addObject:brandPredicate];
}
if (isColorSelected) {
NSPredicate * colorPredicate = [NSPredicate predicateWithFormat:@"ANY skuDetails.color CONTAINS[cd] %@",@"Green"];
[predicateArray addObject:colorPredicate];
}
if (isStorageSelected) {
NSPredicate * colorPredicate = [NSPredicate predicateWithFormat:@"ANY skuDetails.storage CONTAINS[cd] %@",@"256"];
[predicateArray addObject:colorPredicate];
}
NSPredicate *compoundPredicate = [NSCompoundPredicate andPredicateWithSubpredicates:predicateArray];
[[CoreDataManager sharedInstance] fetchWithEntity:@"DevicesCatalogue" Predicate:compoundPredicate success:^(NSArray *fetchLists) {
if(fetchLists) {
}
}failed:^(NSError *error) {
}];
}