iOS:在核心数据谓词中使用@min和@max

我有一个核心数据实体, Client ,它有一个discount属性。 我想以最小的折扣拿到客户。

我正在使用以下NSPredicate

 [NSPredicate predicateWithFormat:@"@min.discount"]; 

但是,我收到以下错误:

 Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Unable to parse the format string "@min.discount"' 

什么是不正确的?

我不认为NSPredicate支持这样的函数,除非它是布尔谓词expression式的一部分(即涉及诸如“大于”之类的东西)。

你应该阅读这个CoreData文档 ,它给出了一些例子,特别是使用max作为例子:

创build和使用expression式描述有很多步骤。

首先,您需要创buildexpression式( NSExpression实例)来表示您感兴趣的值的关键path,并表示要应用的函数(如max:或min :):

 NSExpression *keyPathExpression = [NSExpression expressionForKeyPath:@"salary"]; NSExpression *maxSalaryExpression = [NSExpression expressionForFunction:@"max:" arguments:[NSArray arrayWithObject:keyPathExpression]]; 

有关支持的函数的完整列表,请参阅expressionForFunction:arguments:

然后创buildexpression式描述并设置其名称,expression式和结果types。

该名称是在字典中用于返回值的键。 如果要检索多个值(例如Employee表中的最大和最小薪水),则每个expression式描述的名称对于给定的获取请求必须是唯一的。

 NSExpressionDescription *expressionDescription = [[NSExpressionDescription alloc] init]; [expressionDescription setName:@"maxSalary"]; [expressionDescription setExpression:maxSalaryExpression]; [expressionDescription setExpressionResultType:NSDecimalAttributeType]; 

最后,您将请求的属性设置为仅提取由expression式表示的属性:

 [request setPropertiesToFetch:[NSArray arrayWithObject:expressionDescription]];