我使用了 NSExpression 方法 expressionForFunction:arguments: 平均、求和、最小值、最大值、计数成功,代码与下面相同(在 Apple 的文档中给出)。
但是当涉及到标准差(stddev:) 或中位数(median:) 时。我在编译时没有错误,但我只是在 executeFetchRequest 行上得到“SIGABRT”信号。
在我的代码中,我无法找出平均值、总和、最小值、最大值、计数和标准差或中位数之间的区别。NSExpression 类在参数和返回对象之间没有区别,唯一的区别是可用性(Mac OS 10.4 用于那些正在工作的,10.5 用于其他。
我正在使用 Xcode 4.2,我的应用程序的目标是带有 ARC 的 iOS 5。
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"myEntity" inManagedObjectContext:app.managedObjectContext];
[request setEntity:entity];
[request setPredicate:[NSPredicate predicateWithFormat:@"something == %d",2]];
// Specify that the request should return dictionaries.
[request setResultType:NSDictionaryResultType];
// Create an expression for the key path.
NSExpression *keyPathExpression = [NSExpression expressionForKeyPath:@"anAttribute"];
// Create an expression to represent the minimum value at the key path
NSExpression *statExpression = [NSExpression expressionForFunction:@"stddev:" arguments:[NSArray arrayWithObject:keyPathExpression]];
// Create an expression description using the statExpression and returning a float.
NSExpressionDescription *expressionDescription = [[NSExpressionDescription alloc] init];
// The name is the key that will be used in the dictionary for the return value.
[expressionDescription setName:@"statData"];
[expressionDescription setExpression:statExpression];
[expressionDescription setExpressionResultType:NSFloatAttributeType];
// Set the request's properties to fetch just the property represented by the expressions.
[request setPropertiesToFetch:[NSArray arrayWithObject:expressionDescription]];
// Execute the fetch.
NSError *error = nil;
NSArray *objects = [app.managedObjectContext executeFetchRequest:request error:&error];
if (objects == nil) {
// Handle the error.
}
float result = [[[objects objectAtIndex:0] valueForKey:@"statData"] floatValue];
谢谢你的帮助。