1

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

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

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

我的谓词有什么问题?

编辑:我已经取得了一些进展。现在的问题是,如果我尝试找到一个具有现有组名和现有联系人的组,即 groupname = "test" 和 individual.name = "john doe" 和 individual.contactInfo = "123" 它会正确找到我这个组但是如果我有一个组具有相同的组名和相同的联系人+另一个联系人,它也会找到我不想要的这个组。

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

我现在通过这样做来使用子谓词:

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
4

2 回答 2

3

一组对象不能与CONTAINS谓词匹配。您可以使用 ANY 谓词匹配集合中的一个对象:

[NSPredicate predicateWithFormat:@"name == %@ and ANY individuals.name == %@", name, individualName]; 
于 2012-10-29T15:44:56.713 回答
1

我正在手机上输入此内容,但无法验证,但以下谓词可能对您有用:

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

它搜索具有给定名称的对象,其个体是给定集合的超集。

于 2012-10-29T22:30:59.357 回答