title: Filtering NSMutableArray with NSPredicates
body: <p>I've checked StackOverflow for some of the topics on NSPredicates, and although they all point in the right direction, I must be missing something essential about it all.</p>
  
  <p>I've got an NSMutableArray that contains a list of products.
  Each product has several properties like Brand, Category and Type.</p>
  
  <p>Now I want my users to be able to filter that NSMutableArray using NSPredicates, insomuch that if any of the selected filters are blank, it shouldn't use that filter. </p>
  
  <p>But, in turn, if for example all filters are on: Filter with Brand A with Category B and Type C, it should only show Brand A with Cat B and Type C. </p>
  
  <p>Should I then deselect Cat B, it would filter on Brand A with Type C.</p>
  
  <p>I've written some code, but it mainly returns an empty NSMutableArray, so I guess my NSPredicates are off. </p>
  
  <p>I also found out that I need to default to the 'all products' NSMutableArray before running the predicate, or it will filter the already filtered array when a new filter option is selected. Should I use multiple Arrays with some BOOLean magick, or is this an issue that can be solved using NSPredicates?</p>
  
  <p>Here's my code:</p>
  
  <pre><code>-(void)filterTable
  {
      NSPredicate *brandPredicate;
      NSPredicate *categoryPredicate;
      NSMutableArray *compoundPredicateArray;
  
      if( ![self.selectedBrand isEqual: @"Show All Brands"] || !(self.currentBrand == NULL))
      {
      brandPredicate = [NSPredicate predicateWithFormat:@"brand CONTAINS[cd] %@",self.currentBrand];
      compoundPredicateArray = [ NSMutableArray arrayWithObject: brandPredicate ];
      }
  
      if( ![self.currentCategory isEqual: @"Show All Categories"] || !(self.currentCategory == NULL)) 
      {
          categoryPredicate = [NSPredicate predicateWithFormat:@"category CONTAINS[cd] %@",self.currentCategory];
          [ compoundPredicateArray addObject: categoryPredicate];
      }
  
      NSPredicate *predicate = [NSCompoundPredicate andPredicateWithSubpredicates:
                                compoundPredicateArray ];
  
      [self.tableData filterUsingPredicate:predicate];
      [self.popNTwinBee dismissPopoverAnimated:YES]; // PopoverController
      [self.tableView reloadData];
  }
  </code></pre>