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实体的属性(与实体有很多关系)?
答案 0 :(得分:0)
如果它是可访问的值,您可以使用sortInPlace
对数组进行排序。
您只需要指定如何访问该值以及如何比较它,我想您可以这样调用,检查它是否对您有帮助。
options.sortInPlace({ $0.types.counter < $1.types.counter })
答案 1 :(得分:0)
简短的回答是你不能,因为它没有任何意义。您希望基于许多对象对单个对象进行排序。
现在,如果您想根据最高EntityName
或最大Type
对Type
进行排序,那么这将是一个不同的问题和可解决的问题。
要排序需要对&#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%,因为我无权访问您的项目,我不会像这样命名我的实体。但出于演示目的,它会向您显示一个选项。