데이터 모델 구성을 기반으로 NSPredicate 개체를 만드는 데 문제가 있습니다.NSFetchedResultsController를 사용하여 많은 NSPredicate로
저는 Bob이라는 엔티티의 2 개와 Fred라는 하나의 엔티티가 있습니다. Bob은 'hasFreds'(역방향 hasBobs)라는 Fred와 다 대다 관계를 가지고 있고 Fred는 BOOL 유형의 hasEten 속성을 가지고 있습니다.
모든 Bob이 hasEaten = YES를 사용하여 적어도 하나의 Fred를 가진 Bob의 목록을 가져 오려고합니다. hasEaten = YES 인 프레드가 없으면 프레드가없는 모든 Bob을 반환하고 싶습니다.
이것은 내가 지금까지 가지고있는 것입니다. "hasEnt = Fred가없는 프레드가 없으면 Fred없이 모든 Bob을 반환하려고합니다."조건을 만족하지 못합니다 :
predicate1 = [NSPredicate predicateWithFormat:
@"(SUBQUERY(hasFreds, $fred, $fred.hasEaten = %@)[email protected] > 0)"
,@YES];
fr = [NSFetchRequest fetchRequestWithEntityName:@"Bob"];
fr.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"name" ascending:NO selector:@selector(compare:)]];
fr.predicate = predicate1;
NSFetchedResultsController *fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fr managedObjectContext:[[self appDelegate] managedObjectContext] sectionNameKeyPath:nil cacheName:nil];
fetchedResultsController.delegate = self;
나는 당신의 해결책을 사용하여 비슷한 해결책을 제시했습니다. controllerDidChangeContent에서 countForFetchRequest를 사용하여 술어를 전환해야하는지 여부를 확인한 다음 필요할 경우 변경합니다. NSFetchedResultsController에게 performFetch를 알려주고 다시 시작하는 방법으로 변경 사항을 추적합니다. 나는 그것이 많은 도움이 되었기 때문에 대답을 표시 할 것입니다. –
글쎄, 그것은 본질적으로 같은 해결책입니다. 그래서이 대답을 받아 들여야합니다. 이것은 FRC의 전달 메커니즘에 약간의 차이가 있습니다. 실제로 솔루션의 핵심은 아닙니다. – Mundi