我在排序行时遇到自定义UITableView的问题。让我向你解释一下。
我有一个UITableView,其中的部分使用NSFetchedResultsController发出请求并从我的数据库中获取对象,并将它们分成基于sectionNameKeyPath的部分,如下所示:
var aFetchedResultsController = NSFetchedResultsController(fetchRequest: req, managedObjectContext: managedObjectContext!, sectionNameKeyPath: "dateStatus", cacheName: nil)
这非常合适,它会检索我的数据并填充两个不同的部分,如下所示:"Actually" : [1,2,3,4,5]
"Soon" : [1,2]
我的dateStatus
属性只是一个基于double的String类型,如下所示:
var dateStatus : String {
get {
return licenseStart.doubleValue / 1000 < NSDate().timeIntervalSince1970 ? DateStatus.Actually.rawValue : DateStatus.ComingSoon.rawValue
}
}
直到这一部分一切正常。但现在我想添加一个排序选项,让用户根据licenseStart
对结果进行排序,但保持各个部分的顺序相同。所以我想让我的&#34;实际上&#34;第一节和我的#34;很快&#34;部分但在两个部分内部我想根据用户的选择对项目ASC或DESC进行排序。
所以,现在,如果用户点击&#34;命令后代&#34;如果使用:
创建一个新的NSSortDescriptors
数组,我会怎么做
[NSSortDescriptor(key: "licenseStart", ascending: false), NSSortDescriptor(key: "plan.planId", ascending: false)]
和一个带有这个新排序描述符的新afetchedResultsController!.performFetch()
,但是这个新的提取之后的内容是
"Soon" : [2,1]
"Actually" : [5,4,3,2,1]
这并不是我想要的,这些部分内的项目排序方式正确,但我希望这些部分保持与以前相同的顺序,即:
"Actually" : [5,4,3,2,1]
"Soon" : [2,1]
我尝试过不同的方法来实现这种行为而没有运气,我也尝试在stackoverflow和google上找到类似的问题而没有任何运气,所以我想知道是否有人面临同样的问题问题。
如果有任何不清楚的地方,请随时询问。
非常感谢你
******编辑*******
我已经在另一个Stackoverflow问题中读到了这个但这不适用于我的情况..我想知道为什么..(在我的情况下,NSSortDescriptors也使用第一个排序描述符来排序其中的元素部分)
A fetched results controller (FRC) uses only the first sort descriptor to group (and sort) the objects into sections. A second sort descriptor can be added to sort the objects within each section.
****** 编辑2 *******
我认为一个可能很好的解决方案是创建一个NSExpressionDescription来计算performFetch中的dateStatus
。我的意思是..我可以基于这个表达式创建一个可以有两个整数值0或1的新列:licenseStart.doubleValue / 1000 < NSDate().timeIntervalSince1970 ? 0 : 1
用于节名称
然后我可以先使用这个新列然后使用其他过滤器进行排序,所以在这两个过程中我都会使用此命令对sectionNameKeyPath进行相等的升序,然后再使用其他过滤器。
但我不知道如何使用NSExpressionDescription确切地知道这一点。