swift排序有很多关系的实体数组

时间:2016-04-05 13:28:53

标签: ios arrays swift sorting core-data

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]数组进行排序,这是Type实体的属性(与实体有很多关系)?

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

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

现在,如果您想根据最高EntityName或最大TypeType进行排序,那么这将是一个不同的问题和可解决的问题。

要排序需要对&#34;值&#34;的问题进行一致的回答。在检查多个EntityName个对象时,Type应该对哪个值进行排序?

它应该基于Type个对象的数量吗?这可以分类。

它应该基于Type个对象的存在吗?这也可以分类。

您还可以转换它并获取所有Type实体对象,根据counter对它们进行排序,然后检索与EntityName关联的Type对象排序完成后的实体。然后你的代码看起来像这样:

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%,因为我无权访问您的项目,我不会像这样命名我的实体。但出于演示目的,它会向您显示一个选项。