2012-11-27 2 views
0

다른 엔티티와의 관계가있는 엔티티와 다른 엔티티와의 관계에 대한 조건자를 만들어야합니다. 이것이 가능한가?관계에서 엔티티를 참조하는 술어를 작성하는 방법은 무엇입니까?

Entity: BOOK 
Entity: AUTOR 
Entity: SCHOOL 

그리고이 관계 :

BOOK -> relationAutor <- AUTOR 
AUTOR -> relationSchool <- SCHOOL 
SCHOOL -> attribute "country" 

그래서, 내가 특정 country에서,/필터 책을 가져 오기 위해 필요 나는 다음과 같은 요소를 가지고있다.

NSString *pred = [[NSPredicate predicateWithFormat:@"relationAutor.relationSchool.country IN %@",[countries valueForKey:@"country"]]predicateFormat]; 
predicateFormat = [predicateFormat stringByAppendingFormat:@" AND (%@)",pred]; 

하지만 내 코드 충돌 :

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'unimplemented SQL generation for predicate : (relationAutor.relationSchool.country IN {France})' 

내가 엔티티 AUTOR을 통해 (엔티티 학교에서) 속성 country에 개체 예약에서 일부 관계를 가지고 있기 때문에,이 술어를 연결하는 시도 내가 할 수있는 일이 가능한거야? 그리고 만약 그렇다면 어떻게 그런 술어를 만들 수 있습니까?

답변

0

술어를 문자열 연결로 결합 할 수 없습니다. 2 (또는 그 이상) 다른 술어의 "AND"조합 인 술어가 필요하면 NSCompoundPredicate을 사용하십시오. predicateFormat에 대한

NSArray *countries = @[@"France"]; 
NSPredicate *pred1 = [NSPredicate predicateWithFormat:@"relationAutor.relationSchool.country IN %@", countries]; 
NSPredicate *pred2 = ... // other predicate 

// pred = pred1 AND pred2: 
NSPredicate *pred = [NSCompoundPredicate andPredicateWithSubpredicates:@[pred1, pred2]]; 

도 참조 설명서 :

이 메소드에 의해 반환되는 문자열 predicateWithFormat를 사용하여 조건을 만드는 데 사용되는 문자열로 동일하게 보장 할 수 없습니다 : 등 당신은 할 수 없습니다 이 메소드를 사용하여 원래 술어를 재 작성하는 데 사용할 수있는 술어의 지속적 표현을 작성하십시오.

+0

사실, 다른 조건자를 결합하면 모든 것이 정상입니다. 내 다른 술어는 하나의 관계 만있는 단순한 구문이지만 두 개의 관계가있는이 술어에서는 코드가 충돌합니다 – user1600801

+0

@ user1600801 : 코드가 충돌 했습니까? 제안한 코드가 있습니까? - 나는 나의 대답을 더 많은 정보로 업데이트했다. 술어를 작성하고 결합하는 방법을 전체 코드로 표시하면 도움이되기 쉽습니다. –

관련 문제