使用NSFetchedResultsController和SortDescriptors对部分内的项目进行排序
排序行时,我遇到了自定义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
属性只是一个基于双dateStatus
的String类型,如下所示:
var dateStatus : String { get { return licenseStart.doubleValue / 1000 < NSDate().timeIntervalSince1970 ? DateStatus.Actually.rawValue : DateStatus.ComingSoon.rawValue } }
直到这部分一切正常。 但是现在我想添加一个排序选项,让用户根据licenseStart
对结果进行排序,但保持各个部分的顺序不变。 所以我想先让我的“实际”部分和我的“很快”部分,但在两部分内我想根据用户选择对ASC或DESC项进行排序。
所以,现在,如果用户点击“订单后代”,我做了一个新的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和谷歌没有任何运气,所以我想知道是有人面临同样的问题。
请随时询问是否有任何不清楚的地方。
非常感谢
******编辑*******
我已经阅读了另一个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
licenseStart.doubleValue / 1000 < NSDate().timeIntervalSince1970 ? 0 : 1
为部分名称
那么我可以先使用这个新列,然后使用其他过滤器,所以在我将命令使用此为sectionNameKeyPath等于升序,然后使用其他过滤器。
但我不知道如何使用NSExpressionDescription来做到这一点。
链接地址: http://www.djcxy.com/p/36161.html上一篇: Sort items inside sections with NSFetchedResultsController and SortDescriptors
下一篇: NSFetchedResultsController order not changed when it should