2010-12-18 42 views
12

是否可以採用現有的NSPredicate併爲其添加附加參數?將附加參數添加到現有的NSPredicate中

在我tableviews我傳遞一個NSPredicate在使用我的NSFetchedResultsController像這樣的一個:

[fetchedResults setPredicate:self.predicate]; 

這工作得很好,並會顯示基於現有NSPredicate內容。但是我想通過向tableView添加一個UISegmentedControl來進一步進行這一步。

- (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屬性,是一個int(或者更確切地說,對應於您kDisplayDVDkDisplayVHS等枚舉)。然後,你可以這樣做:

- (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](foo = @"bar" OR baz > 42),新的斷言將是display = 1 AND (foo = @"bar" OR baz > 42)

+1

運行完美。非常感謝,不知道subPredicates。 – avenged 2010-12-18 02:15:49

+1

@avenged你非常歡迎! 'NSPredicate'是Foundation.framework中我最喜歡的東西之一:) – 2010-12-18 03:54:24