核心数据预测很多

时间:2012-10-29 15:33:55

标签: objective-c ios core-data nspredicate

我正在尝试找到一个匹配字符串和一组对象的对象。我的谓词看起来像这样:

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

我没有得到任何点击。虽然我知道有一个实体与名称和个人匹配。

我的谓词出了什么问题?

编辑:我已经设法取得了一些进展。现在的问题是,如果我试图找到一个具有现有组名和现有联系人的组,即groupname =“test”和individ.name =“john doe”和persons.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

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

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

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

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