【发布时间】:2012-01-29 16:54:10
【问题描述】:
我知道获取结果控制器具有节名称键路径可以将获取结果分成多个部分。 但是我怎么能把 NSDate 分成每天或每个月的部分呢? 或者有什么其他方法可以解决这个问题? 谢谢。
【问题讨论】:
标签: ios core-data nsdate nsfetchedresultscontroller
我知道获取结果控制器具有节名称键路径可以将获取结果分成多个部分。 但是我怎么能把 NSDate 分成每天或每个月的部分呢? 或者有什么其他方法可以解决这个问题? 谢谢。
【问题讨论】:
标签: ios core-data nsdate nsfetchedresultscontroller
您需要做的是在数据对象上创建一个瞬态属性,然后对获取的结果进行相应的排序。对于我工作过的 TVGuide,我需要按 airDay 对结果进行排序,最后按 startDate 对事件进行排序,并使用瞬态属性作为部分键名路径:
在 Event.m 中:
-(NSString*) airDay
{
NSDateFormatter *dayFormatter=[[NSDateFormatter alloc] init];
[dayFormatter setLocale:[NSLocale currentLocale]];
[dayFormatter setDateStyle: NSDateFormatterMediumStyle];
[dayFormatter setDoesRelativeDateFormatting: YES];
return [dayFormatter stringFromDate:self.startDate];
}
匹配的fetchrequest
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Event" inManagedObjectContext:[Database db].managedObjectContext];
[fetchRequest setEntity:entity];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:
[NSSortDescriptor sortDescriptorWithKey:@"startDate"
ascending:YES],
nil];
[fetchRequest setSortDescriptors:sortDescriptors];
NSFetchedResultsController *frc = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
managedObjectContext:[Database db].managedObjectContext
sectionNameKeyPath:@"airDay"
cacheName:@"SearchEvents"];
【讨论】:
cacheName: @"SearchEvents" 这是类名还是实体?引用实体时出现错误。谢谢。
请参考“DateSectionTitles”的Apple示例代码,您可以在Xcode帮助中搜索。 它有很大帮助!
【讨论】: