在目标 c 中使用 nspredicate 时如何解决空间问题?

Posted

技术标签:

【中文标题】在目标 c 中使用 nspredicate 时如何解决空间问题?【英文标题】:How to resolve space problems while using nspredicate in objective c? 【发布时间】:2013-12-26 15:42:33 【问题描述】:

我正在尝试从 json 响应中过滤产品列表。对于左侧表达式“状态”右侧,我需要一个下拉菜单。所以我用了正确的表达方式。在使用 nspredicate 过滤此 json 时,由于空间原因,它无法正常工作。请帮助我实现这一目标。

NSArray *Mainarray;// Suppose this contains the response as "status"="Checked In" for 1 product and for other product "status"="Lost/Missing"

NSArray *left=@[[NSExpression expressionForKeyPath:@"status"]];

NSArray *right=@[[NSExpression expressionForKeyPath:@"Awaiting inputs"],[NSExpression expressionForKeyPath:@"Checked In"],[NSExpression expressionForKeyPath:@"Checked out"],[NSExpression expressionForKeyPath:@"Lost/Missing"],[NSExpression expressionForKeyPath:@"xxx Testing/Primary System"],[NSExpression expressionForKeyPath:@"Sold To"],[NSExpression expressionForKeyPath:@"closed"],[NSExpression expressionForKeyPath:@"Used for Parts"]];

NSArray *operators= @[@(NSEqualToPredicateOperatorType),@(NSNotEqualToPredicateOperatorType)];

NSArray *compoundTypes = @[@(NSAndPredicateType),@(NSOrPredicateType),@(NSNotPredicateType)];

NSPredicateEditorRowTemplate *template;

template=[[NSPredicateEditorRowTemplate alloc]initWithLeftExpressions:left rightExpressions:right modifier:NSDirectPredicateModifier operators:operators options:(NSCaseInsensitivePredicateOption | NSDiacriticInsensitivePredicateOption)];

compoundtemp = [[NSPredicateEditorRowTemplate alloc] initWithCompoundTypes:compoundTypes];

[predicateEditor setRowTemplates:@[template,compoundtemp]];


NSPredicate *predicate=[predicateEditor predicate];

NSArray *resultArray=[Mainarray filteredArrayUsingPredicate:predicate];

【问题讨论】:

【参考方案1】:

我有点猜测(因为我没有建立一个测试项目来验证这一点), 但“右手边”是常数值而不是关键路径。 所以你应该替换

 [NSExpression expressionForKeyPath:@"Awaiting inputs"]

通过

[NSExpression expressionForConstantValue:@"Awaiting inputs"]

NSArray *right=@[ ... ] 中,对于其他可能的值也是如此。

【讨论】:

以上是关于在目标 c 中使用 nspredicate 时如何解决空间问题?的主要内容,如果未能解决你的问题,请参考以下文章

连接字符串 NSPredicate 不能正常工作目标 c

NSPredicate:比较没有时间的日期(目标 C)

IOS/目标 C:Coredata NSPredicate 与布尔值

如何使用 NSPredicate 在字符串中查找开头的单词?

如何使用 NSFetchedRequest 或 NSPredicate 从实体中选择所有行?

NSManagedObjectContext -save:使用 NSPredicate 时崩溃