按日期和国家对表格视图部分进行分组

Posted

技术标签:

【中文标题】按日期和国家对表格视图部分进行分组【英文标题】:Grouping table view sections by day and country 【发布时间】:2011-09-28 12:00:50 【问题描述】:

我有一个名为 Event 的核心数据实体,两个相关的属性名为 startDateTimecountryCode。我的问题是我的表格视图中的部分需要按日期和国家代码分组。我已经看到很多关于如何仅按天分组的示例(例如 Apple 的 DateSectionTitles),但是当我添加国家代码时,它变得更加复杂。

我使用 DateSectionTitles 示例中推荐的临时 sectionIdentifier,这些部分看起来像这样:“20110928 SE”、“20110929 SE”、“20110928 GB”等。

我第一次尝试这个:

NSSortDescriptor *sortDescriptor1 = [[NSSortDescriptor alloc] initWithKey:@"startDateTime" ascending:NO];
NSSortDescriptor *sortDescriptor2 = [[NSSortDescriptor alloc] initWithKey:@"countryCode" ascending:NO];
sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor1, nil];
[sortDescriptor1 release];
[sortDescriptor2 release];

但这不起作用,因为 startDateTime 具有导致索引不匹配的时间组件。我需要的是在没有时间组件的情况下对 startDateTime 进行排序。

显而易见的解决方案是将日期和时间分成两个不同的实体属性。但是当我想到它时,这是行不通的,因为日期是相对于时区的。当手机更改时区时,日期和时间属性将无效。

我也尝试子类化 NSSortDescriptor 并创建自定义 compareObject 函数,但它似乎从未被调用,而且我找不到任何工作示例。

你会如何解决这个问题?子类 NSSortDescriptor 是要走的路,还是有更聪明的方法?

【问题讨论】:

【参考方案1】:

在 NSDate 上创建一个类别,方法是从返回日期的日期中去除时间,例如转换这个:

2011-09-29 09:53:28 -0500

…到这个:

2011-09-29

然后将您的排序键设置为dateAttribute.methodName

【讨论】:

嗯不知道我可以使用这样的点。我现在就试一试。 哇,它有效!非常感谢TechZen!当我的声誉允许时,我会投票。

以上是关于按日期和国家对表格视图部分进行分组的主要内容,如果未能解决你的问题,请参考以下文章

json 分组日期和填充 uiTableView 标题

Swift UITableView(无部分)过滤到带有部分的表格视图

SQL - 如何在一年中的每个日期按年龄和状态对项目进行分组/计数 - 第 2 部分

核心数据按格式化日期排序表格视图

使用 FetchedResultsController 显示“过去”和“即将到来”部分 UITableView

将表格视图转换为具有部分