我正在构建一个UITableView
并希望按月分组,以便我可以将这些字符串作为我的部分标题,例如:
February 2013
- Item 1
- Item 2
January 2013
- Item 1
- Item 2
我有一个NSArray
自定义对象,该对象的 pubDate 属性是NSDate
.
如何使用该NSDate
对象将我的自定义对象NSDictionary
按月分组?
我正在构建一个UITableView
并希望按月分组,以便我可以将这些字符串作为我的部分标题,例如:
February 2013
- Item 1
- Item 2
January 2013
- Item 1
- Item 2
我有一个NSArray
自定义对象,该对象的 pubDate 属性是NSDate
.
如何使用该NSDate
对象将我的自定义对象NSDictionary
按月分组?
像这样排序数组
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
}
}
看看NSDateComponents
。如果您将日期转换为日期组件:
[[NSCalendar currentCalendar] components:(NSMonthCalendarUnit | NSYearCalendarUnit) fromDate:date]
那么您将拥有可以很容易地比较是否相等的对象。
我认为,这个问题缺少 Ole Begemann 的答案,但是这是一个链接(我无法发表评论 < repo)我正在回答这个问题,
如果有人仍在寻找一些优雅的解决方案,请检查一下,
http://oleb.net/blog/2011/12/tutorial-how-to-sort-and-group-uitableview-by-date/