1

人と多くの関係を持つエンティティ部門があるとします。スポーツ部門を検索して、スコットオルセン氏がそこで働いているかどうかを確認できるようにしたいと思います。Personスコットオルセンはユニークではありません(3つの異なるで3つのスコットが働いている可能性があります)Department

Departmentスポーツを検索して、Personそこで機能しているスコットオルセンを見つけ、他のスコットを見つけられないようにするにはどうすればよいですか?

私が考えることができる基本的な方法は次のとおりです。

for (Person *person in sports.persons) {
    if ([person.name isEqualToString:@"Scott Olsen"]) {
        // found him!
    }
}

または:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY persons.name == 'Scott Olsen'"];

Department *department = [Department MR_findFirstWithPredicate:predicate];

Departementしかし、2番目がスポーツで働くスコットオルセンを返すかどうかはわかりません。その後、チェックできると思います

if ([department.name isEqualToString:@"Sports"])

しかし、NSPredicateを使用してそれを行うためのより良い方法があるはずのようですが、私はそれを理解できません。

4

2 に答える 2

4

これはあなたが探しているものですか?

NSString *name = @"Scott Olsen";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name = %@", name];
NSSet *filtered = [sports.persons filteredSetUsingPredicate:predicate];

または(上記のコードを投稿した後に質問が変更されました):

NSString *name = @"Scott Olsen";
NSString *department = @"Sports";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name = %@ AND department = %@",
      name, department];
Person *person = [Person MR_findFirstWithPredicate:predicate];

(あなたが人から部門への逆の関係「部門」を持っていると仮定します)。

于 2013-03-26T16:35:15.557 に答える
1

述語に2番目の式を追加するだけです。

[NSPredicate predicateWithFormat:@"name == 'Sports' && ANY persons.name == 'Scott Olsen'"];
于 2013-03-26T16:37:19.240 に答える