【问题标题】:Any way of sorting CoreData entity after fetch request?获取请求后对CoreData实体进行排序的任何方式?
【发布时间】:2021-01-12 12:21:38
【问题描述】:

我发现对 FetchedRequest 进行排序的唯一方法是使用 NSSortDescriptor 在获取时完成。但是,我想实现不同类型的排序(例如,按名称、按数量增加、按数量减少),该怎么做?比较我需要排序的每个获取的项目属性并决定,其中一个应该在列表中居高临下还是低位?

【问题讨论】:

  • 你需要研究如何对一组对象进行排序,应该有很多可用的信息
  • “我想实现不同类型的排序(例如,按名称、按数量增加、按数量减少)”对我来说似乎可以放入 NSSortDescriptor 中,基本排序。在查询中完成的排序更有效。否则,它是关于对数组进行排序,这是非常基本的,并且取决于您的需要。你的问题现在太宽泛了。
  • 感谢您的建议。我将花一些时间研究排序数组。

标签: swift core-data


【解决方案1】:

您不一定需要 NSSortDescriptor。之后您也可以对获取的数组进行排序。

看这个例子,我用 startDate 来排序我的日期

ForEach(self.events.sorted {
    $0.startDate < $1.startDate
}, id:\.id) { event in

【讨论】:

    【解决方案2】:

    我发现了如何做到这一点,其实很简单

    @FetchRequest(entity: Item.entity(), sortDescriptors: [
    NSSortDescriptor(keyPath: \Item.serialNum, ascending: true)
        ]) 
    var items: FetchedResults<Item> // fetching core data
    @State var SortedItems:[Item] = [] // creating an additional array
    

    按数量递增排序如下:

    SortedItems = items.sorted(by: {$0.amount < $1.amount}) // giving our additional array a value of FetchRequest, but sorted by increasing amount
    

    按数量递减排序如下:

    SortedItems = items.sorted(by: {$0.amount > $1.amount}) // giving our additional array a value of FetchRequest, but sorted by decreasing amount
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-19
      • 1970-01-01
      • 1970-01-01
      • 2011-03-03
      • 1970-01-01
      相关资源
      最近更新 更多