首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获取密钥路径的NSExpression?

如何获取密钥路径的NSExpression?
EN

Stack Overflow用户
提问于 2016-08-19 19:55:06
回答 1查看 598关注 0票数 0

我有一个表格视图和一个搜索栏。我必须搜索多个键的值,并相应地筛选表。我使用以下代码进行过滤

代码语言:javascript
复制
- (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中,我必须获得如下值:

代码语言:javascript
复制
cell.lblSku.text = [[dict objectForKey:@"STOCKUNIT"] objectForKey:@"text"];
cell.lblProductMajor.text = [[dict objectForKey:@"PRODUCTMAJORGROUP"] objectForKey:@"text"];

我的问题是,如何添加objectForKey:@"text"来获取[NSExpression expressionForKeyPath:@"STOCKUNIT"];的值?如何在expressionForKeyPath中添加额外的密钥?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-19 20:15:16

我通过在expressionForKeyPath中添加.text解决了这个问题

代码语言:javascript
复制
NSExpression *lhsProductName = [NSExpression expressionForKeyPath:@"PRODUCTNAME.text"];
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39038487

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档