У меня проблемы с получением результатов из базовых данных, отсортированных по дате.
У меня есть таблица БД, которая содержит футбольные матчи. Каждый матч имеет homeTeam, awayTeam и kickoffTime. KickoffTime - это NSDate, в котором хранятся дата и время начала матча.
Я хочу отобразить результаты запроса в TableView, разделенном на разделы по дате начала. С датой в качестве заголовка раздела.
Это немного сложнее, чем может показаться на первый взгляд. Из-за различий в часовых поясах матч, начинающийся с одной даты в одной части мира, фактически начинается с другой даты в другой части мира. Поэтому я не могу просто проигнорировать время и сохранить даты начала в другом столбце.
То, что я пытаюсь сделать, создать пользовательский метод доступа, который возвращает отформатированную дату в любом часовом поясе, в котором находится пользователь, а затем использовать это для сортировки и разделения результатов. Вот мой код в Match.h:
@dynamic kickoffTime;
@dynamic formattedKickoffTime;
@dynamic dateFormatter;
- (NSString *)formattedKickoffTime
{
[self willAccessValueForKey:@"kickoffTime"];
// Set the date formatter to the format we want to display the date
[dateFormatter setDateFormat:@"ccc, d MMM"];
// Format the date
NSString *myFormattedKickoffTime = [dateFormatter stringFromDate:[self kickoffTime]];
[self didAccessValueForKey:@"kickoffTime"];
// return the formatted date
return myFormattedKickoffTime;
}
- (NSDateFormatter *)dateFormatter
{
if (dateFormatter == nil)
{
dateFormatter = [[NSDateFormatter alloc] init];
}
return dateFormatter;
}
@end
Однако, когда я пытаюсь получить и отсортировать данные следующим образом:
NSSortDescriptor *kickoffDescriptor = [[NSSortDescriptor alloc] initWithKey:@"formattedKickoffTime" ascending:YES];
...
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:appDelegate.managedObjectContext sectionNameKeyPath:@"formattedKickoffTime" cacheName:nil];
Я получаю следующее сообщение об ошибке:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'keypath formattedKickoffTime not found in entity <NSSQLEntity Match id=1>'
Кто-нибудь может дать совет, пожалуйста?