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

时间:2012-01-29 16:54:11

标签: ios core-data nsdate nsfetchedresultscontroller

我知道获取结果控制器的节名称键路径可以将获取的结果划分为多个部分。 但是,我怎样才能将NSDate划分为每天或每个月的部分? 或者其他任何方法来解决这个问题? 感谢。

2 个答案:

答案 0 :(得分:8)

您需要做的是在数据对象上创建瞬态属性,然后相应地对获取的结果进行排序。对于我曾经做过的TVGuide,我需要通过airDay对结果进行排序,最后通过startDate对事件进行排序,并使用transient属性作为section key name路径:

在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"];

答案 1 :(得分:3)

请参阅Apple示例代码“ DateSectionTitles ”,您可以在Xcode帮助中进行搜索。 它帮了很多!!