Я пытаюсь найти все экземпляры объекта, которые содержат ссылку на комбинацию отдельных объектов в моем графе объектов.NSPredicate несколько ANY запросов с CoreData
recommendation
может содержать один или более из следующих трех объектов:
damageType
areaDamaged
validVehicles
Эта структура построена из импорта формата файла в существующей системе и я не могу изменить структуру графа объекта.
Я использую NSPredicate
найти все recommendation
объектов, которые имеют damageType
соответствие выбранного повреждения следующим образом:
NSFetchRequest *fetchRequestDamages = [NSFetchRequest fetchRequestWithEntityName:NSStringFromClass([Recommendation class])];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY damageType == %@", _currentRecordedDamage.damageType];
Но хотят фильтр, чтобы вернуть все Recommendations
, которые имеют спички для конкретного damageType
, areaDamaged
и validVehicle
Я попытался
NSMutableArray *predicates = [[NSMutableArray alloc] initWithCapacity:2];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY damageType == %@", _currentRecordedDamage.damageType];
[predicates addObject:predicate];
NSPredicate *predicate2 = [NSPredicate predicateWithFormat:@"ANY areaDamaged == %@", _currentAreaDamaged];
[predicates addObject:predicate2];
NSPredicate *predicate3 = [NSPredicate predicateWithFormat:@"ANY validVehicles == %@", _currentVehicle];
[predicates addObject:predicate3];
fetchRequestDamages.predicate = [NSCompoundPredicate andPredicateWithSubpredicates:predicates];
fetchRequestDamages.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES]];
self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequestDamages managedObjectContext:[RKManagedObjectStore defaultStore].mainQueueManagedObjectContext sectionNameKeyPath:nil cacheName:nil];
self.fetchedResultsController.delegate = self;
NSError *error;
[self.fetchedResultsController performFetch:&error];
int resultsFound = self.fetchedResultsController.fetchedObjects.count;
, но, похоже, это возвращает набор всех объектов, удовлетворяющих любому из предикатов - мне бы хотелось, чтобы набор объектов соответствовал всем трем.
Я ищу в использовании SUBQUERY
, но не могу понять, как создать этот запрос?
Что ваш код для выполнения выборки запроса? –
Обновлен код – davbryn
@ davbryn: Итак, вы уже делаете то, что я предложил ниже. - Возможно, вы можете показать пример того, что вы получаете в настоящее время и чего вы ожидаете. –