2010-12-18 29 views
12

既存のNSPredicateを使用して追加の引数を追加することは可能ですか?既存のNSPredicateに追加の引数を追加する

私はそうのように私のNSFetchedResultsController用で使用するNSPredicateを渡しています私のtableviewsの一

[fetchedResults setPredicate:self.predicate]; 

これがうまく働いていると、既存のNSPredicateに基づいてコンテンツを表示します。しかし、私はこれを一歩前進させるために、UISegmentedControlをtableViewに追加します。

- (IBAction)segmentChange:(id)sender { 
    switch (selectedSegment) { 
      case kDisplayDVD: 
       // Add argument to existing NSPredicate 
       break; 
      case kDisplayVHS: 
       // Add argument to existing NSPredicate 
       break; 
      default: 
       break; 
     } 

ユーザーが選択したセグメントに基づいて、既存のNSPredicateに引数を追加したいと考えています。これはすべて可能ですか?

答えて

39

確かに!

オブジェクトには、displayという名前のプロパティがあります(つまり、kDisplayDVDkDisplayVHSなどに対応する列挙型です)。次に、あなたが行うことができます。(foo = @"bar" OR baz > 42)ある

- (IBAction) segmentChange:(id)sender { 
    NSPredicate * newCondition = [NSPredicate predicateWithFormat:@"display = %d", selectedSegment]; 
    NSPredicate * newPredicate = [NSCompoundPredicate andPredicateWithSubpredicates:[NSArray arrayWithObjects:[self predicate], newCondition, nil]]; 
    [self setPredicate:newPredicate]; 
} 

ので[self predicate]場合、あなたの新しい述語がdisplay = 1 AND (foo = @"bar" OR baz > 42)

+1

は完璧な作品になります。ありがとう、サブ述語については考えていない。 – avenged

+1

@avengedあなたは大歓迎です! 'NSPredicate'はFoundation.frameworkで私が一番好きなものの一つです:) –

関連する問題