2016-04-05 30 views
0
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

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

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

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

谢谢,我得到:'NSSet类型的价值?没有会员'柜台' –

+0

你如何获得柜台的价值?只是在块中修改,它应该工作 – UlyssesR

0

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

现在,如果您想根据最高的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%,因为我没有访问到您的项目,我也不会名字我的实体是这样。但出于演示目的,它会向您显示一个选项。