将获取的结果 NSDate 分成每天使用核心数据的部分

Posted

技术标签:

【中文标题】将获取的结果 NSDate 分成每天使用核心数据的部分【英文标题】:divide fetched results NSDate into sections for each single day use core data 【发布时间】:2012-01-29 16:54:10 【问题描述】:

我知道获取结果控制器具有节名称键路径可以将获取结果分成多个部分。 但是我怎么能把 NSDate 分成每天或每个月的部分呢? 或者有什么其他方法可以解决这个问题? 谢谢。

【问题讨论】:

【参考方案1】:

您需要做的是在数据对象上创建一个瞬态属性,然后对获取的结果进行相应的排序。对于我工作过的 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" 这是类名还是实体?引用实体时出现错误。谢谢。 只使用 nil 作为 cacheName 代替。在许多情况下,您不需要提供一个【参考方案2】:

请参考“DateSectionTitles”的Apple示例代码,您可以在Xcode帮助中搜索。 它有很大帮助!

【讨论】:

以上是关于将获取的结果 NSDate 分成每天使用核心数据的部分的主要内容,如果未能解决你的问题,请参考以下文章

NSPredicate 获取具有 NSDate 日期范围内的日期属性的核心数据对象

如何快速为 NSDate 做核心数据获取谓词?我想按月过滤

将 NSDate 和 NSNumber 和/或保存在相同的核心数据属性中

我如何将 NSDate() 分成几块?

带有谓词的核心数据获取请求。需要正确的 NSPredicate

将 NSDate 存储在核心数据中(swift)