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 述語を使用して、セット内の 1 つのオブジェクトに一致させることができます。

[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 に答える