我有一个核心数据实体Client,它有一个discount属性.我想以最小的折扣获取客户端.
我使用以下内容NSPredicate:
[NSPredicate predicateWithFormat:@"@min.discount"];
Run Code Online (Sandbox Code Playgroud)
但是,我收到以下错误:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Unable to parse the format string "@min.discount"'
Run Code Online (Sandbox Code Playgroud)
什么不对?
NSPredicate除非它是布尔谓词表达式的一部分(即涉及"大于"之类的东西),否则我认为不支持这样的函数.
您应该阅读此CoreData文档,其中提供了一些示例,特别max是作为示例使用:
创建和使用表达式描述需要遵循许多步骤.
首先,您需要创建表达式(实例
NSExpression)来表示您感兴趣的值的键路径,并表示要应用的函数(例如max:或min :):Run Code Online (Sandbox Code Playgroud)NSExpression *keyPathExpression = [NSExpression expressionForKeyPath:@"salary"]; NSExpression *maxSalaryExpression = [NSExpression expressionForFunction:@"max:" arguments:[NSArray arrayWithObject:keyPathExpression]];有关支持的功能的完整列表,请参阅
expressionForFunction:arguments:.然后,您可以创建表达式描述并设置其名称,表达式和结果类型.
名称是将在字典中用于返回值的键.如果要检索多个值(例如Employee表中的最大和最小工资),则每个表达式描述的名称对于给定的提取请求必须是唯一的.
Run Code Online (Sandbox Code Playgroud)NSExpressionDescription *expressionDescription = [[NSExpressionDescription alloc] init]; [expressionDescription setName:@"maxSalary"]; [expressionDescription setExpression:maxSalaryExpression]; [expressionDescription setExpressionResultType:NSDecimalAttributeType];最后,将请求的属性设置为仅获取表达式所表示的属性:
Run Code Online (Sandbox Code Playgroud)[request setPropertiesToFetch:[NSArray arrayWithObject:expressionDescription]];
| 归档时间: |
|
| 查看次数: |
4080 次 |
| 最近记录: |