저는 여전히 NSPredicate를 사용하는 것이 처음이지만, 다소 복잡한 문제가 있습니다. 솔루션에 대한 최선의 방법은 확실하지 않습니다. .many-to-many-many 관계에 대한 NSPredicate 필터
많은 절차에서 사용할 수있는 Instrument라는 엔티티에 대한 필터를 만들려고합니다. 절차는 차례로 하나 이상의 질병과 관련이 있습니다. 질병은 많은 절차와 관련이 있으며, 도구는 둘 이상의 절차에서 사용될 수 있습니다. 즉, 내가 가진 대다 일대 다 관계를 다음
Instruments <-> Procedures <-> Diseases
내가 뭘하고 싶은 것은 Disease.title를 사용하여 필터 악기입니다. 간단하고 마법의 세계에서,이, 나는 필터가 절차와 말할 수있을만큼 질병의 필드를 알고 있다는 것을 발견 간단하게 (약간의 오타 및 misnamings와) 작품으로이 작품을 통해 스테핑
//where predicate is used on the Instruments array
[NSPredicate predicateWithFormat:@"(procedures.diseases.title == %@)", diseaseTitleString];
로 될 것이다 저 "질병 유형"은 절차 분야가 아니며 "이름"은 질병 분야가 아닙니다. Naivety는이 단순한 술어가 작동하기를 기대하면서 나를 인도했습니다.
나는 아무것도 얻지 못합니다.
(ALL procedures.diseases.title == %@)
도 사용해 보았지만 작동하지 않습니다.
하위 술어에 대한 몇 가지 사항을 보았습니다. 그러나 실제로 저에게 많은 의미를 부여하는 것은 아닙니다.
은 기본적으로 내가 목록 싶어 : 나는 다른 조건을 기준으로 필터링 할 수있는 배열을 얻기 위해이 방법을 사용하고, 지금
NSArray *instruments = [[NSArray alloc] init];
for (Disease *disease in Diseases) {
if ([disease.title isEqualToString:titleString]) {
for (Procedure *procedure in disease.procedures) {
for (Instrument *instrument in procedure.instruments) {
if (![instruments containsObject:instrument]) {
[instruments addObject:instrument];
}
}
}
}
}
을, 그리고 그것을 잘 작동,하지만 그것은 추한 및 더 나은, 깨끗한 방법으로 이것을 필터링 할 수있는 것처럼 느껴집니다. 누구나 NSPredicate 디자인의 미세한 사용에 대해 교육 할 수 있습니까?
여기에 좋은 팁이 있지만 그 술어는 여전히 빈 배열을 반환합니다. 내 다른 하위 술어는 잘 작동하지만,이 많은 - 많은 - 많은 하나는 여전히 작동하지 않지만 위의 코드에서 루프 내장 콜렉션과 동등해야합니다. '[instrumentFilters addObject : [NSPredicate predicateWithFormat : @ "ANY procedures.diseases.title = % @", filterValue]]; 그리고 나서 다른 필터와 잘 작동하는 화합물을 만듭니다. 나는 다른 것을 놓치고 있습니까? –
및 화합물없이 실행하면 어떻게됩니까? –
해당 술어 (복합어 없음) 만 사용하여 필터를 실행해도 아무런 결과가 반환되지 않습니다. :( –