Я пытаюсь группировать и подсчитывать дату на основном объекте данных. поскольку дата не может быть группой из-за разного времени. поэтому я пытаюсь передать пользовательскую функцию для nsexpression. но я получаю некоторые ошибки, я не знаю, что это правильный способ сделать это.nsexpression с данными основного ядра функции
код для группировки и подсчета:
NSEntityDescription *entity = [NSEntityDescription entityForName:@"TEvents"
inManagedObjectContext:context];
NSDictionary *props = [entity propertiesByName];
NSPropertyDescription *propDesc3 = [props objectForKey:@"startDateTime"];
NSExpression *propExpr3 = [NSExpression expressionForKeyPath:@"startDateTime"];
NSExpression *countExpr3 = [NSExpression expressionForFunction:propExpr3 selectorName:@"dateShort" arguments:nil];
NSExpressionDescription *exprDesc3 = [[NSExpressionDescription alloc] init];
[exprDesc3 setExpression:countExpr3];
[exprDesc3 setExpressionResultType:NSDateAttributeType];
[exprDesc3 setName:@"dateStart"];
NSFetchRequest *fr = [NSFetchRequest fetchRequestWithEntityName:@"TEvents"];
[fr setPropertiesToGroupBy:[NSArray arrayWithObjects:propDesc3, nil]];
[fr setPropertiesToFetch:[NSArray arrayWithObjects:propDesc3, exprDesc3, nil]];
[fr setResultType:NSDictionaryResultType];
NSError * error = nil;
NSArray *results = [context executeFetchRequest:fr error:&error];
dateShort является NSDate функция категория, которая преобразует datatime в текущей зоне пользователя:
-(NSString *) dateShort
{
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setCalendar:[NSCalendar currentCalendar]];
[formatter setTimeZone:[NSTimeZone localTimeZone]];
[formatter setDoesRelativeDateFormatting:YES];
[formatter setDateStyle:NSDateFormatterShortStyle];
[formatter setTimeStyle:NSDateFormatterNoStyle];
NSString *tmpValue = [formatter stringFromDate:self];
return tmpValue;
}
ошибка:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Unsupported function type passed to SQL store'
, как достичь эта цель: конвертировать datetime в текущую зону и группу и рассчитывать на (yy-mm-dd) на базе данных ность?
Пожалуйста, объясните, как вы его достигли. – Krishnan
NSFetchRequest имеет хорошие свойства «propertiesToFetch» и «propertiesToGroupBy». поэтому в основном создайте массив типа NSPropertyDescription, указывающий на столбец. вы можете комбинировать NSPropertyDescription с NSExpression с функциями агрегации. –