【发布时间】:2012-01-14 12:56:14
【问题描述】:
我确信我试图将 SQL 逻辑应用于 Core Data 是有罪的,但即使在阅读了 Apple 文档之后,我仍然不确定正确的方法。
对 Core Data 实体中两个日期属性的差异求和的最佳策略是什么?我在“appt”类上有一个“numHours”计算属性,但在 xcdatamodel 中没有。下面的代码失败,出现“在实体中找不到密钥路径”错误。非常感谢您的任何建议。
来自 appt 类
- (float)numHours {
float hours = ([self.endTime timeIntervalSinceDate:self.startTime] - [self.durationOfBreak intValue]) / 3600.00;
return hours;
}
尝试获取“numHours”属性的总和
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"appt" inManagedObjectContext:self.managedObjectContext];
[request setEntity:entity];
NSPredicate *datePredicate = [NSPredicate predicateWithFormat:@"date >= %@ && date < %@", self.startDate, self.endDate];
[request setPredicate:datePredicate];
[request setResultType:NSDictionaryResultType];
NSExpression *numHoursPath = [NSExpression expressionForKeyPath:@"numHours"];
NSExpression *hoursSum = [NSExpression expressionForFunction:@"sum:"
arguments:[NSArray arrayWithObject:numHoursPath]];
NSExpressionDescription *debitExpressionDescription = [[NSExpressionDescription alloc] init];
[debitExpressionDescription setName:@"totalhours"];
[debitExpressionDescription setExpression:hoursSum];
[debitExpressionDescription setExpressionResultType:NSDecimalAttributeType];
[request setPropertiesToFetch:[NSArray arrayWithObject:debitExpressionDescription]];
[debitExpressionDescription release];
NSError *error = nil;
NSArray *results = [managedObjectContext executeFetchRequest:request error:&error];
【问题讨论】: