Ios 按月份将NSDate对象为NSDictionary的NSArray排序

Ios 按月份将NSDate对象为NSDictionary的NSArray排序,ios,objective-c,cocoa-touch,nsarray,nsdictionary,Ios,Objective C,Cocoa Touch,Nsarray,Nsdictionary,我正在构建一个UITableView,希望按月分组,以便将这些字符串作为我的节标题,例如: February 2013 - Item 1 - Item 2 January 2013 - Item 1 - Item 2 我有一个NSArray,它有一个自定义对象,其pubDate属性是NSDate 如何使用该NSDate对象按月将自定义对象分组到NSDictionary中?查看。如果将日期转换为日期组件: [[NSCalendar currentCalendar] components:(NS

我正在构建一个
UITableView
,希望按月分组,以便将这些字符串作为我的节标题,例如:

February 2013
- Item 1
- Item 2

January 2013
- Item 1
- Item 2
我有一个
NSArray
,它有一个自定义对象,其pubDate属性是
NSDate

如何使用该
NSDate
对象按月将自定义对象分组到
NSDictionary
中?

查看。如果将日期转换为日期组件:

[[NSCalendar currentCalendar] components:(NSMonthCalendarUnit | NSYearCalendarUnit) fromDate:date]
然后,就可以很容易地比较对象是否相等了。

像这样对数组进行排序

NSArray *sortedArray = [yourArrayOfCustomObjects sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
        NSDate *firstDate = [(YourCustomObject*)obj1 pubDate];
        NSDate *secondDate = [(YourCustomObject*)obj2 pubDate];
        return [firstDate compare:secondDate];        

    }];
//现在进行一次简单的迭代,您可以确定所有相同月份的条目

//代码不完整,仅用于说明

//你也必须处理年份变化

int curMonth = 0;
int prevMonth = 0;
foreach(CustomObject *obj in sortedArray)
{
   NSDateComponents *components = [[NSCalendar currentCalendar] components:NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit fromDate:obj.pubDate];
   prevMonth = curMonth; 
   curMonth = components.month;
   if(prevMonth != 0 && curMonth != prevMonth)
   {
      //Month Changed
   }
}

我想,这个问题缺少Ole Begemann的答案,但是这是一个链接(我无法发表评论 如果有人还在寻找一些优雅的解决方案,看看这个


使用内置的数组排序例程,可以非常简单地对日期数组进行排序(如果它是纯NSDate对象)。然后“浏览”数组,并注意新月份开始的时间,添加相应的月份标题。否,数组中填充了自定义对象,其中一个属性为
NSDate
。然后需要通过几种数组排序方法之一描述日期的路径。只是稍微复杂一点。@NicHubbard你们得到答案了吗?我的要求和你一样。请让我知道如何才能达到像你的问题一样的结果?