swift - 从最后一项获取核心数据 ManageObject 排序

标签 swift sorting core-data fetch

我想从核心数据中获取所有项目,但从最新到最旧排序。我的实体“骰子”具有日期类型的属性“时间戳”。

这是我保存和获取的方式:

class func saveResults(_ withResults: Int) -> Bool {
    let context = getContext()
    let entity = NSEntityDescription.entity(forEntityName: "Dice", in: context)
    let manageObject = NSManagedObject(entity: entity!, insertInto: context)

    let date = Date()

    manageObject.setValue(withResults, forKey: "result")
    manageObject.setValue(date, forKey: "timestamp")

    do {
        try context.save()
        return true
    } catch {
        return false
    }
}

class func fetchObject() -> [Dice]? {
    let context = getContext()
    var dices:[Dice]? = nil

    do {
        dices = try context.fetch(Dice.fetchRequest())
        return dices
    } catch {
        return dices
    }
}

有谁知道如何排序。所有解决方案都令人困惑,并显示出从旧到新的排序。

最佳答案

您需要指定一个适当的排序描述符。

我建议让函数throw并交出错误。

class func fetchObject() throws -> [Dice] {
    let context = getContext()
    let fetchRequest : NSFetchRequest<Dice> = Dice.fetchRequest()
    fetchRequest.sortDescriptors = [NSSortDescriptor(key: "timestamp", ascending: false)]
    return try context.fetch(fetchRequest)
}

注意:fetch 操作返回 [Dice]。不需要类型转换。

关于swift - 从最后一项获取核心数据 ManageObject 排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50019780/

相关文章:

java:根据数组2对数组1进行排序

ios - 将 CoreData 键传递给新的 ViewController

swift - 如何在后台线程中使用新的过滤谓词重新加载 NSFetchedResultsController ?

ios - 使用 'if let' 在 swift 'where' 中仅处理其他条件

swift - 快速从 findObjectsInBackgroundWithBlock 获取数据

swift - 带有 switch swift 的通用枚举

java - Quicksort 偶尔不完成?

ios - 缓存整个网站 - Swift

LINQ 和 CASE 敏感性

ios - 如何基于双向关系从核心数据中获取数据?