Swift Core Data 两个排序描述符

Posted

技术标签:

【中文标题】Swift Core Data 两个排序描述符【英文标题】:Swift Core Data two sort descriptors 【发布时间】:2020-04-05 21:48:08 【问题描述】:

任何帮助都会很棒。 Core Data 使用“日期”作为截止日期和截止时间。值来自 Swift UI 选择器 (displayedComponents: .date) 和 (displayedComponents: .hourAndMinute)。排序不正确。

var fetchCategories = [Category]()
            let request: NSFetchRequest<Category> = Category.fetchRequest()
            let predicate = NSPredicate(format: "isComplete == 0")
            let sortDueDate = NSSortDescriptor(key: "dueDate", ascending: true)
            let sortDueTime = NSSortDescriptor(key: "dueTime", ascending: false)
            let sortDescriptors = [sortDueDate, sortDueTime]
            request.sortDescriptors = sortDescriptors
            request.predicate = predicate
            do 
                fetchCategories = try moc.fetch(request)
             catch 
                print("Error fetching categories \(error.localizedDescription)")
            
            return fetchCategories

【问题讨论】:

【参考方案1】:

Core Data 中的Date 属性存储日期和时间。我猜dueTime 属性包含的日期晚于dueDate 日期,从而导致排序问题。

解决方案是将dueDate 存储为一个属性。此属性包含日期和时间,您可以在用户界面中单独修改。你也只需要一个SortDescriptor

【讨论】:

以上是关于Swift Core Data 两个排序描述符的主要内容,如果未能解决你的问题,请参考以下文章

Core Data 根据是不是存在关系对描述符进行排序?

在 Swift 中从 Core Data 接收到的排序数组

如何根据来自多个 Core Data 属性的计算值进行排序

在 Swift Core Data 中对存储的数据模型提取进行排序

Swift Core Data Fetch 按日期和时间存储为字符串并排序

使用 Core Data 时如何重新排列部分