Я обнаружил, что у пользователей моего приложения на iPod Touches с ОС iPhone 3.1.3 возникло сбои: по какой-то причине использование выражения «@count:» в хранилище CoreData вызывает сбой. Вот соответствующий код:
NSExpression *avgExpression = [NSExpression expressionForFunction:@"average:" arguments:[NSArray arrayWithObject:keyPathExpression]];
NSExpressionDescription *ed = [[NSExpressionDescription alloc] init];
[ed setName:@"avgScalar"];
[ed setExpression:avgExpression];
[ed setExpressionResultType:NSFloatAttributeType];
NSExpression *countExpression = [NSExpression expressionForFunction:@"count:" arguments:[NSArray arrayWithObject:keyPathExpression]];
NSExpressionDescription *ed2 = [[NSExpressionDescription alloc] init];
[ed2 setName:@"countScalar"];
[ed2 setExpression:countExpression];
[ed2 setExpressionResultType:NSInteger16AttributeType];
[request setPropertiesToFetch:[NSArray arrayWithObjects:ed,ed2,nil]];
Когда выполняется выборка, я получаю следующую ошибку при сбое:
* Завершение работы приложения из-за необработанного исключения «NSInvalidArgumentException», причина: «* -constantValue определена только для абстрактного класса. Определить - [NSKeyPathExpression constantValue]! '
Если я ограничу выборку значением avgExpression (@ "average:"), все будет работать нормально. В выражении @ "count:" есть что-то странное, насколько я могу судить только об iPod Touches с iPhone OS 3.1.3. Есть идеи?
Я мог бы поочередно выполнить полную выборку и использовать ключевые операторы пути для получения необходимых мне средних и подсчетов. Тем не менее, я беспокоюсь, что такой подход будет намного дороже. Кто-нибудь знает, если это так?