【发布时间】:2010-11-16 12:11:58
【问题描述】:
我无法从 Core Data 中获取按日期排序的结果。
我有一个包含足球比赛的数据库表。每场比赛都有主队、客队和开球时间。 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>'
有人能给点建议吗?
【问题讨论】:
标签: objective-c sorting core-data nsfetchedresultscontroller nsdateformatter