Как суммировать рассчитанную недвижимость? - PullRequest
1 голос
/ 14 января 2012

Я уверен, что виновен в том, что пытался применить логику SQL к Core Data, но даже после прочтения документации Apple я все еще не уверен в правильном подходе.

Какова была бы лучшая стратегия для суммирования разности двух свойств даты в сущности базовых данных?У меня есть вычисляемое свойство "numHours" в классе "appt", но не в xcdatamodel.Приведенный ниже код завершается с ошибкой «keypath not found in entity».Большое спасибо за любые советы.

из класса 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]; 

1 Ответ

0 голосов
/ 17 января 2012

Джеффри,

Вы не можете получить данные на основе атрибута, которого на самом деле нет в модели.Сообщение об ошибке «keypath not found in entity» прямо говорит об этом.Вы можете убедиться в этом сами, просмотрев базу данных SQLite, и вы увидите, что нет атрибута для запроса SQL.Следовательно, ваш запрос на выборку не должен быть выполнен.NSExpression *numHoursPath является допустимым выражением.Он может быть применен к коллекциям после их получения.Вы просто не можете использовать их в запросе на получение.

Андрей

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...