使用1个NSFetchedResultsController

时间:2018-05-23 22:05:08

标签: ios swift uitableview sorting nsfetchedresultscontroller

我有一个包含两个部分的tableview,"最喜欢"和"最近"订购存储的联系人。 我想按字母顺序排序收藏,最近按日期排序。 每个联系人都有一个"名称"和#34; createdAt"价值(和价值"最喜欢"如果它是最喜欢的)。

使用下面的排序我有我的部分"最喜欢"和"最近"使用正确的单元格,但都按字母顺序排序。

...
fetchRequest.sortDescriptors = [NSSortDescriptor(key: "favorite", ascending: false),
                                    NSSortDescriptor(key: "firstName", ascending: true)]
fetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: stack.viewContext, sectionNameKeyPath: "favorite", cacheName: nil)
...

override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
    guard let currentSection = fetchedResultsController.sections?[section] else { return nil }

    if currentSection.name == "0" {
        return "Recent".localized
    } else {
        return "Favorites".localized
    }
}

如何对“"最近"按日期?

1 个答案:

答案 0 :(得分:0)

我通过手动更改第二部分的indexPath解决了这个问题。 我有一个函数返回indexPath以不同的方式为第二部分。

func changeIndexPath (_ indexPath: IndexPath) -> IndexPath {
... //sort you want
}

然后我可以使用tableview的功能

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
...
newIndexPath = changeIndexPath(indexPath)
...
}

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
...
}
etc