我有一个名称为FoodItem
的实体,它具有一个属性price
(双精度)。理想情况下,此代码的输出为:
Average Price is: 6.00
虽然我不确定如何访问值6.00。谁能帮助我?谢谢
这是我的代码:
NSEntityDescription *entity = [NSEntityDescription entityForName:@"FoodItem" inManagedObjectContext:self.managedObjectContext];
NSManagedObject *o1 = [NSEntityDescription insertNewObjectForEntityForName:[entity name] inManagedObjectContext:self.managedObjectContext];
[o1 setValue:@(5.00) forKey:@"price"];
NSManagedObject *o2 = [NSEntityDescription insertNewObjectForEntityForName:[entity name] inManagedObjectContext:self.managedObjectContext];
[o2 setValue:@(7.00) forKey:@"price"];
[self.managedObjectContext save:nil];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:entity];
[request setSortDescriptors:@[]];
NSExpression *keyPathExpression = [NSExpression expressionForKeyPath:@"price"];
NSExpression *averagePriceExpression = [NSExpression expressionForFunction:@"average:"
arguments:@[keyPathExpression]];
NSExpressionDescription *expressionDescription = [[NSExpressionDescription alloc] init];
[expressionDescription setName:@"averagePrice"];
[expressionDescription setExpression:averagePriceExpression];
[expressionDescription setExpressionResultType:NSDecimalAttributeType];
[request setPropertiesToFetch:[NSArray arrayWithObject:expressionDescription]];
NSFetchedResultsController *controller = [[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:@"Master"];
[controller performFetch:nil];
NSLog(@"Average price is: %@", @"");
最佳答案
我不明白为什么要为此使用访存结果控制器。 NSFetchedResultsController
不能用于此目的。为此使用一个简单的NSFetchRequest
。
// Your previous code here
// Execute the fetch.
NSError *error = nil;
NSArray *objects = [managedObjectContext executeFetchRequest:request error:&error];
if (objects == nil) {
// Handle the error.
}
else {
if ([objects count] > 0) {
NSLog(@"Average price is: %@", [[objects objectAtIndex:0] valueForKey:@"averagePrice"]);
}
}
可以从Apple文档Fetching Specific Values中找到一个简单的示例。
关于ios - 计算所有NSManagedObjects属性的平均值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17306968/