我正在使用核心数据和NSFetchedResultsController在表视图中显示日期。在获取时,我希望这些日期对象按照即将到来的月份/日期排序,直到今天忽略年份,最好(如果可能),而不必将获取的结果存储在数组中,并被迫对该数组执行单独的排序操作。这是基本的想法,其余的是上下文。按最近日期排序NSFetchedResultsController忽略年份
我的NSManagedObject子类Date
有2个属性:
Date.date -> 1986-02-06 08:00:00 +0000 // the stored date of type Date
Date.equalizedDate -> 02/06 // computed from date ignoring year of type String
如果我所取得的成果控制器上使用NSSortDescriptor(key: "date", ascending: true)
,然后在表视图中的日期由今年(不是我想要的)排序
Date.date 1978-06-23 07:00:00 +0000 // 1978 = #1
Date.date 1986-02-06 08:00:00 +0000 // 1986 = #2
Date.date 1991-07-26 07:00:00 +0000 // 1991 = #3
如果我使用NSSortDescriptor(key: "equalizedDate", ascending: true)
忽略年份并显示正确的提升,但它不会与今天的日期相比:
Date.date 1986-02-06 08:00:00 +0000 // 02/06 = #1 (February 6th)
Date.date 1978-06-23 07:00:00 +0000 // 06/23 = #2 (June 23rd)
Date.date 1991-07-26 07:00:00 +0000 // 07/26 = #3 (July 26th)
如果,例如,今天是4月5日,那么我希望获取的成果加以取出,并显示如下:
// Today is April 5th
Date.date 1978-06-23 07:00:00 +0000 // 06/23 = #1 (June 23rd)
Date.date 1991-07-26 07:00:00 +0000 // 07/26 = #2 (July 26th)
Date.date 1986-02-06 08:00:00 +0000 // 02/06 = #3 (February 6th)
目前,由我来完成的唯一途径,这是通过存储所取出的结果控制器导致的阵列,在执行到阵列上的比较,以及使用我的读取的结果控制器的阵列,而不是用于我的表视图行和单元格的数据源:
// fetchedResults = [Date] <- stored Date objects from fetch
for fetchedDate in fetchedResults {
// formatDateIntoString changes 2015-10-26 05:43:22 +0000 into 10/26
if fetchedDate.equalizedDate < NSDate().formatDateIntoString() {
fetchedResults.removeAtIndex(0)
fetchedResults.append(fetchedDate)
} else {
break
}
}
return fetchedResults
我宁愿省略这个额外的逻辑层,因为它不仅消除了获取结果控制器的完整性能,而且在执行轻扫删除操作时(link for reference)也给我带来了不可思议的麻烦和错误的索引路径。我知道比较器和选择器不适用于提取结果控制器。
有什么办法可以解决这个问题吗?
是否在其他地方使用了'equalizedDate'?如果解决这个问题更容易,是否可以为这个领域使用不同的值(或不同的类型)? –