2012-04-01 34 views
1

更新以下问题: 我们能够使用父实体获取请求通过使用fatherChild关系来查询子实体。示例查询如下:如何为多个实体创建一个fetchRequest?

NSPredicate *myPredicate = [NSPredicate predicateWithFormat:@"fatherChild.name LIKE 'fx'"]; 

现在,我们正在努力做的是使用上面的谓词,但另一个地方,我们要找到孩子的父亲定名称的另一个条件。我们用下面的代码

NSPredicate *myPredicate = [NSPredicate predicateWithFormat:@"name LIKE 'john' AND ANY fatherChild.name in 'fx'"]; 

但程序崩溃与例外: [__NSCFString countByEnumeratingWithState:对象:伯爵:]:无法识别的选择发送到实例0xad49c40

通过我们看到,我们可以使用子查询的例子阅读但不知道我们的情况是什么语法,我们有一个具有一对多关系的实体。任何帮助,将不胜感激?

谢谢。

问题: 我们有一个包含三个实体的数据模型:父亲,母亲和孩子。请参阅图片以供参考。

我们有一个例子查询请求对父亲实体如下:

NSEntityDescription *entity = [NSEntityDescription entityForName:@"Father" 
              inManagedObjectContext:managedObjectContext]; 
    [request setEntity:entity]; 

    NSString *attributeName = @"name"; 
    NSPredicate *myPredicate = [NSPredicate predicateWithFormat:@"%K like %@", 
    attributeName, searchField.text]; 

我们对母亲和儿童的实体类似的查询请求。我们想要做的是创建一个查询来结合父亲和母亲的实体。例如,我们希望在单个查询中搜索父名= Mike和Mothers name = Jen。我们该怎么做呢?

感谢您的回复。

+1

你是说你想从一个单一的查询中得到两种不同类型的结果,或者你正在尝试寻找哪里有'mother.name == foo'和'father.name == bar'的孩子? – 2012-04-01 21:28:03

+0

后者是我们正在努力做的。谢谢! – user1306828 2012-04-01 21:58:06

回答

1

我们发现我们可以使用SUBQUERY来解决问题。

NSPredicate *myPredicate = [NSPredicate predicateWithFormat:@"name LIKE %@ AND fatherMother.name LIKE %@ AND (0!=SUBQUERY(fatherChild,$varChild,$varChild.name=%@)[email protected])",dad.text, mom.text, baby.text];         

这里fatherMotherfatherChild有关系的名字。

dad.text,mom.text和baby.text是UITextField值。

+0

@tangqiaoboy我在这里有类似的问题(http://stackoverflow.com/questions/11934763/nspredicate-on-nested-object-nsset-to-filter-the-result-during-nsfetchrequest)...我有尝试了下面的谓词:[NSPredicate predicateWithFormat:@“mode = 0 AND ALL(SUBQUERY(enrollments,$ varEnrollment,$ varEnrollment.mode = 0))”]但它不适合我,在我的谓词注册中是我的关系...你能建议我在哪里做错了吗? – yunas 2012-08-15 09:53:53

+0

@yunas对不起,我不知道,你应该问'user1306828',他是答案的作者。我只是帮他在答案中格式化代码。 – tangqiaoboy 2012-08-29 04:15:37

相关问题