7

プロパティを持つコアデータエンティティ、Clientがありdiscountます。最小の割引でクライアントを取得したい。

私は以下を使用していますNSPredicate

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

ただし、次のエラーが発生します。

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

何が正しくないのですか?

4

1 に答える 1

8

NSPredicateブール述語式の一部でない限り(つまり、「より大きい」などを含む)、このような関数はサポートされていないと思います。

特に例として使用して、いくつかの例を示すこのCoreDataドキュメントを読む必要があります。max

式の説明を作成して使用するには、いくつかの手順に従う必要があります。

NSExpressionまず、関心のある値のキーパスを表し、適用する関数(max:やmin :)を表す式(のインスタンス)を作成する必要があります。

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

サポートされている機能の完全なリストについては、を参照してくださいexpressionForFunction:arguments:

次に、式の説明を作成し、その名前、式、および結果の種類を設定します。

名前は、辞書で戻り値として使用されるキーです。Employeeテーブルの最大給与と最小給与など、複数の値を取得する場合は、各式の説明の名前が特定のフェッチ要求に対して一意である必要があります。

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

最後に、式で表されるプロパティのみをフェッチするようにリクエストのプロパティを設定します。

[request setPropertiesToFetch:[NSArray arrayWithObject:expressionDescription]];
于 2012-06-11T10:25:55.480 に答える