У меня есть 2 сущности в отношении ко-многим, Родитель -> Ребенок. Дочерняя сущность имеет логический атрибут, который может быть ИСТИНА или ЛОЖЬ.
Я могу легко посчитать, сколько дочерних сущностей существует с [parent.child count]
, что возвращает мне хорошее целое число.
Но что, если я только хочу посчитать дочерние сущности, которые ИСТИНА? Есть ли простой способ сделать это?
EDIT
Я пытался реализовать предикатный выбор @ unforgiven, но я получаю ошибку «невозможно разобрать строку формата» - это код, который я пытаюсь (где Checklist
- родительская сущность, ChecklistItem
является дочерней сущностью, а checked
является логическим значением для ChecklistItem):
- (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath
{
Checklist *aChecklist = [self.fetchedResultsController objectAtIndexPath:indexPath];
cell.textLabel.text = aChecklist.name;
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Checklist" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SUBQUERY(checklistItem, $sub, $sub.checked == %@).@count", [NSNumber numberWithBool:YES]];
[fetchRequest setPredicate:predicate];
NSError *error = nil;
NSArray *results = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error];
cell.detailTextLabel.text = [NSString stringWithFormat:@"%i items ticked", [results count]];
[fetchRequest release];
}
Если я заменим предикат на any self.checklistItems.checked = %@
, приложение не аварийно завершит работу, но возвращенное число будет равно общее количество контрольных списков, для которых проверен любой ChecklistItem , что, очевидно, означает, что оно возвращает то же число за каждый контрольный список.