使用 NSSortDescriptor 按时间倒序对 CoreData 进行排序

Posted

技术标签:

【中文标题】使用 NSSortDescriptor 按时间倒序对 CoreData 进行排序【英文标题】:Sorting CoreData in reverse chronological order with NSSortDescriptor 【发布时间】:2014-12-14 16:15:37 【问题描述】:

我有一个使用 tableview 设置的 Core Data 数据库,我正在尝试将它设置在 table view 中显示的对象按时间倒序显示的位置。我正在尝试使用 NSSortDescriptor 执行此操作,但无法弄清楚如何按时间倒序对其进行排序。有任何想法吗?谢谢。

这是我的代码:

func getCoreData()

        var appDel : AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate
        var context : NSManagedObjectContext = appDel.managedObjectContext!
        var req : NSFetchRequest = NSFetchRequest(entityName: "KeptQuotes")

        var s = NSSortDescriptor(key: "quote", ascending: true)
        req.sortDescriptors = [s]

        var error : NSError?

        let fetchedResults = context.executeFetchRequest(req, error: &error) as [NSManagedObject]?


        if let results = fetchedResults 

            keptQuotes = results

        else

            println("Could not fetch \(error), \(error!.userInfo)")

        

        tableView.reloadData()

    

【问题讨论】:

【参考方案1】:

在 NSDate 类型的实体中设置日期属性,然后将此属性设置为排序描述符并将升序设置为 false。

let sortDescriptor = NSSortDescriptor(key: "date", ascending: false)
fetchRequest.sortDescriptors = [sortDescriptor]

【讨论】:

有没有办法在不设置日期的情况下做到这一点? 您必须为其提供一些属性以进行排序,并且日期属性似乎适合您正在处理的数据 啊哈,没有添加日期对象的对象会发生什么 - 它们会被排除在表格视图之外还是只是被发送到后面? 不确定它会如何处理,但无论如何尝试它并没有什么坏处。最坏的情况你可以编写自己的比较方法 "您通过指定要比较的属性的键路径、排序顺序(升序或降序)和(可选)用于执行比较的选择器来构造 NSSortDescriptor 的实例"

以上是关于使用 NSSortDescriptor 按时间倒序对 CoreData 进行排序的主要内容,如果未能解决你的问题,请参考以下文章

如何使用一个选择器创建一个按多个键排序的 NSSortDescriptor

使用 NSSortDescriptor、Core Data 和 NSFetchedResultsController 按日期和名称对 UITableView 进行排序

NSSortDescriptor 按核心数据对多关系中的项目数排序

可以将“self”与 NSSortDescriptor 一起使用来按对象本身而不是对象的属性进行排序? (核心数据/NSFetchedResultsController)

使用 NSSortDescriptor 将“nil”值保留在列表底部

按关系属性对 NSFetchedResultsController 排序? NSFetchRequest NSSortDescriptor