2012-06-11 4 views
6

コアデータエンティティClientがあり、これはdiscountというプロパティを持っています。最小の割引でクライアントを取得したい。iOS:コアデータ述語で@minと@maxを使用する

私は、次の NSPredicateを使用しています

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

しかし、私は次のようなエラーになっています:

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

を右は何をしているのではないでしょうか?

+0

はこれです(のhttp://開発.apple.com/library/ios /#documentation/Cocoa/Conceptual/KeyValueCoding/Articles/CollectionOperators.html) – kimimaro

答えて

7

NSPredicateは、ブール型述語式の一部でない限り(つまり「より大きい」など)、このような関数をサポートしているとは思いません。あなたは、具体的例としてmaxを使用して、いくつかの例を与えるthis CoreData documentationをお読みください

:[キー値コーディングプログラミングガイド:コレクション演算子]あなたが探しているものを

There are a number of steps to follow to create and use the expression description.

First you need to create expressions (instances of NSExpression) to represent the key-path for the value you’re interested in, and to represent the function you want to apply (such as max: or min:):

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

For a full list of supported functions, see expressionForFunction:arguments: .

You then create the expression description and set its name, expression, and result type.

The name is the key that will be used in the dictionary for the return value. If you want to retrieve multiple values—such as the largest and the smallest salaries in an Employee table—the name of each expression description must be unique for a given fetch request.

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

Finally, you set the request’s properties to fetch just the property represented by the expression:

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