【问题标题】:swift sort array of entities with many relation快速排序具有许多关系的实体数组
【发布时间】:2016-04-05 13:28:53
【问题描述】:
func fetchCD() -> [Entity] {

  var options : [Entity] = []
  let fetchRequest = NSFetchRequest(entityName:"EntityName")

  do {
    options = try cdh.managedObjectContext.executeFetchRequest(fetchRequest) as! [Entity]
  } catch let error as NSError {
    print("Fetch failed: \(error.localizedDescription)")
  } catch {

  }

  //here I'd like to order by Entity.types.counter (desc) 

  return options
}

//Entity+CoreDataProperties.swift
extension Entity {
    //my values
    @NSManaged var types: NSSet?
}


//Type+CoreDataProperties.swift

extension Type {

@NSManaged var counter: NSNumber

}

我如何通过 conter 对我的 [Entity] 数组进行排序,conter 是 Type 实体上的一个属性(与 Entity 有很多关系)?

【问题讨论】:

    标签: ios arrays swift sorting core-data


    【解决方案1】:

    简短的回答是你不能,因为它没有任何意义。您希望根据多个对象对单个对象进行排序。

    现在,如果您想根据最高的Type 或最大的TypeEntityName 进行排序,那将是一个不同的问题,也是一个可以解决的问题。

    排序需要对“价值”问题的一致回答。当检查许多Type 对象时,EntityName 应该按什么值排序?

    应该是基于Type对象的数量吗?那是可以排序的。

    应该是基于Type对象的存在吧?也可以排序。

    您也可以反过来获取所有Type 实体对象,根据counter 对它们进行排序,然后在排序完成后检索与Type 实体关联的EntityName 对象。那么您的代码将如下所示:

    func fetchCD() -> [Entity] {
    
      let fetchRequest = NSFetchRequest(entityName:"Type")
      fetchRequest.sortDescriptors = [NSSortDescriptor("counter", ascending: true)]
    
      do {
        let results = try cdh.managedObjectContext.executeFetchRequest(fetchRequest) as! [Type]
        let options = results.map($0.entity) as! [Entity]
        //Type is already sorted
        return options
      } catch {
        fatalError("Fetch failed: \(error)")
      }
    }
    

    此代码不是 100%,因为我无权访问您的项目,也不会这样命名我的实体。但出于演示目的,它向您展示了一个选项。

    【讨论】:

      【解决方案2】:

      如果它是一个可访问的值,您可以使用sortInPlace 对数组进行排序。

      你只需要指定如何访问该值,以及如何比较它,我认为你可以这样调用,检查它是否对你有帮助。

      options.sortInPlace({ $0.types.counter < $1.types.counter })
      

      【讨论】:

      • 谢谢,我收到了:Value of type NSSet? has no member 'counter'
      • 如何获取 counter 的值?只需在块中进行修改,它应该可以工作
      猜你喜欢
      • 1970-01-01
      • 2018-02-08
      • 2015-07-21
      • 1970-01-01
      • 2012-03-15
      • 1970-01-01
      • 2014-07-24
      • 2019-09-09
      • 1970-01-01
      相关资源
      最近更新 更多