0

別のエンティティとの関係から別のエンティティとの関係を持つエンティティで述語を作成する必要があります。これは可能ですか?次のエンティティがあります。

Entity: BOOK
Entity: AUTOR
Entity: SCHOOL

そして、これらの関係:

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

したがって、特定のcountry. countryエンティティ BOOK からエンティティ AUTOR を介して (エンティティ SCHOOL から)属性への関係があるため、この述語を連結しようとしました。

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})'

私がやろうとしていることは可能ですか?もしそうなら、どうすればそのような述語を構築できますか?

4

1 に答える 1

0

文字列連結によって述語を結合することはできません。2 つ (またはそれ以上) の他の述語の「AND」の組み合わせである述語が必要な場合は、次のように使用しますNSCompoundPredicate

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]];

のドキュメントも参照してくださいpredicateFormat

このメソッドによって返される文字列は、predicateWithFormat: などを使用して述語を作成するために使用される文字列と同じであるとは限りません。このメソッドを使用して、元の述語を再作成するために使用できる述語の永続的な表現を作成することはできません。

于 2012-11-27T06:13:13.957 に答える