核心数据NSPredicate to to many Relationship

时间:2012-02-22 11:17:23

标签: objective-c ios core-data nspredicate relationship

我在查询的制定中遇到了问题;这是场景:

my DB schema

基于这个db模式,我知道命名部分很糟糕,但事实确实如此 一个已经开始的项目,所以我要坚持下去。

现在,我的目标是选择具有确定的pack_id和某个category_id的所有字符,即类别5中包1的所有字符,所以这是我的NSPredicate

    NSFetchRequest *request = [[NSFetchRequest alloc] init];
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(category_id == %@) AND (charRelationship.pack_id == %@)", [[cat valueForKey:@"category_id"] stringValue], curPack];
    [request setEntity:[NSEntityDescription entityForName:@"Category" inManagedObjectContext:self.managedObjectContext]];
    [request setPredicate:predicate];

    NSError *error;
    NSArray *result = [self.managedObjectContext executeFetchRequest:request error:&error];

一旦编译器尝试执行fetchRequest,它就会崩溃并转向SIGABRT。 我真的很讨厌xcode甚至没有给我一个关于异常的线索这一事实,所以我可以自己解决这个问题。因此,在盲目地试图修复它并没有成功之后,我想知道是否有人可以帮助我。 我已经在SO和其他地方红了很多其他线程,但我找不到任何解决方案。

非常感谢

-k -

2 个答案:

答案 0 :(得分:1)

尝试使用ANY进行关系:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(category_id == %@) AND (ANY charRelationship.pack_id like %@)", [[cat valueForKey:@"category_id"] stringValue], curPack];

答案 1 :(得分:0)

实际上,您不得为相关联的实体单独存储任何ID。例如:在您的情况下,您可以从字符实体中引用类别,如:

[NSPredicate predicateWithFormat:@"catRel = %@", cat];

但是,我不确定您要对该代码段做什么。我是对的,你有一个存储在'cat'变量中的Category实体,并且只是从带有谓词的数据库中选择它吗?我会说,category_id已经识别出你的类别......无论如何,请尝试不使用“charRelationship.pasck_id ==%@”但是加载相应的Character实体并使用“charRelationship =%@”来放置你的实体。 / p>