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
或最大的 Type
对 EntityName
进行排序,那么这将是一个不同的问题并且是可解决的问题。
排序需要对“值(value)”问题有一致的答案。当检查许多 Type
对象时,EntityName
应按什么值排序?
应该基于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%,因为我无权访问您的项目,并且我不会这样命名我的实体。但出于演示目的,它向您展示了一个选项。
关于ios - 快速排序具有许多关系的实体数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36427787/