2016-04-05 34 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%,因爲我沒有訪問到您的項目,我也不會名字我的實體是這樣。但出於演示目的,它會向您顯示一個選項。