SQL 백엔드에서만 일대 다 관계를 사용할 수 있습니다. 이 작업을 수행하지만 순서가 지정된 집합에 "백 링크"를 추가해야합니다 (정렬을 사용하는 경우 순서를 유지하려면 고유 범주를 여러 범주로 나눌 수 있으므로 고유성을 유지해야합니다). 한계를 고려하면 이상적은 아니지만 나쁘지 않습니다.
// Search for all subcategories with item count > 0
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Subcategory"];
request.predicate = [NSPredicate predicateWithFormat:@"[email protected] > 0"];
NSError *error = nil;
// They should have an inverse relationship to their category...
// We have to iterate and insert them in to a set, but there is no additional
// disk access.
NSMutableOrderedSet *results = [NSMutableOrderedSet orderedSet];
[[self.projectDatabase.managedObjectContext executeFetchRequest:request error:&error] enumerateObjectsUsingBlock:^(Subcategory *obj, NSUInteger idx, BOOL *stop) {
[results addObject:obj.category];
}];
편집
불행하게도, 나는 이것이 SQL 저장소로 가능하다고 생각하지 않습니다. 먼저, SQL 전문가와 가까운 곳이 아니라는 것을 강조하고 일반적으로 이러한 유형의 쿼리가 필요하지 않도록 CoreData 저장소를 설계하려고합니다. 그러나 다음 SUBQUERY는 InMemory 저장소에서 작동하므로 적절하게 형식이 지정된 하위 쿼리입니다.
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"SUBQUERY(subcategories, $s, [email protected] > 0)[email protected] > 0"];
그러나 SQL 술어를 사용할 때이 술어는 오류를 제공합니다. 문서는 SQL 상점에서 술어를 사용할 때 상당한 수의 제한이 있다고 말합니다. 그래서 나는 놀랍지도 않고, 이것을 연구하는데 너무 많은 시간을 소비하지도 않습니다.
KVC 집합체를 포함하는 키 패스. $ s.items를 처리 할 수 에 실패했습니다. @ 내 경험을 바탕으로
NSCompoundPredicate를 통해 여러 NSPredicate를 사용하십시오. https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Predicates/Articles/pCreating.html –
'items'은 아마도'@ count'를 사용하여 설정되었습니다. –