2012-02-22 107 views
0

我在制定我的查询时遇到了问题;这是该方案:核心数据NSPredicate for toMany Relationsihp

my DB schema

在此基础上DB模式,我知道的命名部分吸了一点,但这是 它已被拉开序幕的一个项目,所以我坚持与。现在

,我的目标是选择所有具有确定pack_id和一定CATEGORY_ID,即所有从包1第5类的人物角色,所以这次只要是我的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-

+0

你说你想要*字符*,但你的'NSFetchRequest'正在使用* Category *实体。这是什么? – 2012-02-22 12:44:36

+0

我本来可以做相反的事情(从字符开始),但它并没有改变我必须处理两个独立实体之间的交叉关系这样的事实,所以它以一种方式或另一种方式进行,它不会改变,我只是想让它工作。 – holographix 2012-02-22 15:07:09

回答

1

尝试使用任何的关系:

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

已经试过任何方式,但没有得到我的任何地方:( – holographix 2012-02-22 15:10:29

+0

任何是我的解决方案,以确保关系是category_id数据库中的NSString?我很困惑你为什么使用stringValue – ggfela 2012-02-22 15:20:51

+0

nope它是一个int32, stringValue只是一个绝望的尝试:) – holographix 2012-02-22 15:21:48

0

其实你不能单独存储任何ID为是相关联的实体。例如: - 在你的情况,你可能只是指从类的人物实体,如:

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

但是,我不知道你有什么打算与片段做。我是对的,你有一个类别实体存储在你的'猫'变量中,并且只是用谓词从数据库中选择它?我会说,category_id已经识别你的类别......不管用户“charRelationship.pasck_id ==%@”,但是加载相应的Character实体并在你刚刚放置实体的地方使用“charRelationship =%@”。

相关问题