2016-08-19 5 views
0

У меня есть вид на стол и панель поиска. Я должен искать значения нескольких ключей и таблицу фильтров соответственно. Я использую следующий код для фильтрацииКак получить NSExpression для ключевого пути?

- (void)updateSearchResultsForSearchController 
{ 
    NSString *searchText = self.searchBr.text; 
    NSMutableArray *searchResults = [self.arrayPriceList mutableCopy]; 
    NSString *strippedString = [searchText stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; 
    NSArray *searchItems = nil; 
    if (strippedString.length > 0) { 
     searchItems = [strippedString componentsSeparatedByString:@" "]; 
    } 
    NSMutableArray *andMatchPredicates = [NSMutableArray array]; 

    for (NSString *searchString in searchItems) { 
     NSMutableArray *searchItemsPredicate = [NSMutableArray array]; 

     // Below we use NSExpression represent expressions in our predicates. 
     // NSPredicate is made up of smaller, atomic parts: two NSExpressions (a left-hand value and a right-hand value) 

     // Product SKU 
     NSExpression *lhsSKU = [NSExpression expressionForKeyPath:@"STOCKUNIT"]; 
     NSExpression *rhsSKU = [NSExpression expressionForConstantValue:searchString]; 
     NSPredicate *finalPredicateSKU = [NSComparisonPredicate 
              predicateWithLeftExpression:lhsSKU 
              rightExpression:rhsSKU 
              modifier:NSDirectPredicateModifier 
              type:NSContainsPredicateOperatorType 
              options:NSCaseInsensitivePredicateOption]; 
     [searchItemsPredicate addObject:finalPredicateSKU]; 

     // Product Major group 
     NSExpression *lhsProductMajorGroup = [NSExpression expressionForKeyPath:@"PRODUCTMAJORGROUP"]; 
     NSExpression *rhsProductMajorGroup = [NSExpression expressionForConstantValue:searchString]; 
     NSPredicate *finalPredicateMajorGroup = [NSComparisonPredicate 
              predicateWithLeftExpression:lhsProductMajorGroup 
              rightExpression:rhsProductMajorGroup 
              modifier:NSDirectPredicateModifier 
              type:NSContainsPredicateOperatorType 
              options:NSCaseInsensitivePredicateOption]; 
     [searchItemsPredicate addObject:finalPredicateMajorGroup]; 
     // at this OR predicate to our master AND predicate 
     NSCompoundPredicate *orMatchPredicates = [NSCompoundPredicate orPredicateWithSubpredicates:searchItemsPredicate]; 
     [andMatchPredicates addObject:orMatchPredicates]; 
    } 

    // match up the fields of the Product object 
    NSCompoundPredicate *finalCompoundPredicate = 
    [NSCompoundPredicate andPredicateWithSubpredicates:andMatchPredicates]; 
    searchResults = [[searchResults filteredArrayUsingPredicate:finalCompoundPredicate] mutableCopy]; 
    // hand over the filtered results to our search results table 
    self.arrayFilteredPriceList = searchResults; 
} 

Но в cellForRowAtIndexPath, я должен получить значение, как показано ниже:

cell.lblSku.text = [[dict objectForKey:@"STOCKUNIT"] objectForKey:@"text"]; 
cell.lblProductMajor.text = [[dict objectForKey:@"PRODUCTMAJORGROUP"] objectForKey:@"text"]; 

Мой вопрос, как я могу добавить objectForKey:@"text", чтобы получить значения для [NSExpression expressionForKeyPath:@"STOCKUNIT"];? Как добавить дополнительный ключ к expressionForKeyPath?

ответ

0

Я решил, добавив .text в expressionForKeyPath

NSExpression *lhsProductName = [NSExpression expressionForKeyPath:@"PRODUCTNAME.text"]; 

 Смежные вопросы

  • Нет связанных вопросов^_^