2012-10-29 95 views
1

我试图找到一个匹配字符串和一组对象的对象。我的谓词如下所示:核心数据谓词对多

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name == %@ and individuals CONTAINS %@", name, individuals]; 

我没有收到任何匹配。虽然我知道有一个匹配名称和个人设置的实体。

我的谓词有什么问题?

编辑:我设法做了一些进步。现在的问题是,如果我试图找到一个具有现有组名称和现有联系人的组,即groupname =“test”和individuals.name =“john doe”,并且individuals.contactInfo =“123”,它会正确地找到该组但如果我有一个具有相同组名和相同联系人的组+另一个联系人,它也会找到我这个我不想要的组。

我只想要与谓词完全匹配的组。

我现在使用subpredicates通过这样做:

NSMutableArray *subPredicates = [NSMutableArray initWithCapacity:5]; 
// Add group name to predicate 
[subPredicates addObject:[NSPredicate predicateWithFormat:@"name == %@", name]]; 

for (NSDictionary *contactInfo in individuals) { 

    NSString *name = [contactDict objectForKey:@"name"]; 
    NSString *contactInfo = [contactDict objectForKey:@"contactInfo"]; 

    NSPredicate *individualPredicate = [NSPredicate predicateWithFormat:@"ANY individuals.name LIKE %@ AND any individuals.contactInfo LIKE %@", name, contactInfo]; 

    [subPredicates addObject:individualPredicate]; 
} 

NSPredicate *individualsPredicate = [NSCompoundPredicate andPredicateWithSubpredicates:subPredicates]; 

Group *group = // do the fetch with the predicate 

回答

1

我在手机上打字,但无法验证它,但下面的谓词可能会为你工作:

[NSPredicate predicateWithFormat:@"name == %@ AND SUBQUERY(individuals, $x, $x IN %@)[email protected] == %d", 
    name, individuals, individuals.count]; 

它搜索您可以使用ANY谓词一组匹配一个对象对于给定名称的个体是给定集合的超集的对象。

+0

我以为SUBQUERY可以用来过滤一个基于谓词的集合。 Apple的例子:(SUBQUERY(居民,$ x,$ x.firstname ==“Jane”&& $ x.lastname ==“Doe”)。@ count!= 0)。我不认为这将在给定的元素列表上工作。 – diederikh

+0

这个谓词对我不起作用,如果我有一个包含两个人的组,这个谓词将返回这个组,即使我只提供了这个组中的一个人。 –

+0

我想我在另一个线程中找到了我的问题的确切答案,因此我将此答案标记为已接受。 (在这里回答:http://stackoverflow.com/a/13086353/294661) –

3

一组对象不能与CONTAINS谓词匹配。

[NSPredicate predicateWithFormat:@"name == %@ and ANY individuals.name == %@", name, individualName]; 
+1

因此,没有办法将“NSSet”与谓词相匹配? –

+0

我更新了我的代码,几乎在那里我想。你能帮我解决最后一件事吗? –

+0

如果要匹配集合中的所有元素,可以使用ALL谓词而不是ANY。 – diederikh