0

我需要用一个与另一个实体有关系的实体与另一个实体建立一个谓词。这可能吗?我有以下实体:

Entity: BOOK
Entity: AUTOR
Entity: SCHOOL

而这些关系:

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

所以,我需要从特定的country. 因为我通过实体 AUTOR 从实体 BOOK 到属性country(来自实体 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 回答