2010-12-18 10 views
12

Mevcut bir NSPredicate ürününü almak ve buna ek bir argüman eklemek mümkün müdür? Öyle gibi benim NSFetchedResultsController için kullanılacak bir NSPredicate geçen am benim tableviews birinde Var olan bir NSPredicate öğesine ek argüman ekleyin

: Bu sadece iyi çalışıyor ve mevcut NSPredicate göre içerik gösterecektir

[fetchedResults setPredicate:self.predicate]; 

. Ancak, bu tabloya bir UISegmentedControl ekleyerek bunu bir adım daha ileriye taşımak istiyorum.

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

Kullanıcının seçtiği segmente bağlı olarak, mevcut NSPredicate öğesine bir argüman eklemek istiyorum. Bu mümkün mü?

cevap

39

Elbette!

senin nesneleri bir int var display adlı bir özellik (daha doğrusu, sizin kDisplayDVD, kDisplayVHS vb tekabül Bir enum) var diyelim. Sonra yapabilirsiniz: (foo = @"bar" OR baz > 42) olduğunu

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

Yani [self predicate] bile, yeni yüklem display = 1 AND (foo = @"bar" OR baz > 42)

+1

mükemmel çalışır olacaktır. Çok teşekkürler, subPredicates hakkında hiçbir fikrim yoktu. – avenged

+1

@avenged Çok hoş geldiniz! “NSPredicate”, Foundation.framework'daki en sevdiğim şeylerden biridir :) –

İlgili konular