2016-04-05 19 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 

} 

どのように私は[Entity]配列を、エンティティのプロパティであるconterでソートしますか(エンティティとの関係はたくさんあります)多くのリレーションを持つエンティティの素早い並べ替え配列

答えて

0

アクセシブルな値の場合はsortInPlaceを使用して配列をソートできます。

値にアクセスする方法と値を比較する方法を指定するだけで、このように呼び出すことができます。

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

ありがとうございます。「NSSet型の値?メンバーはありません 'カウンター' –

+0

あなたはどのようにカウンターの値にアクセスしますか?ブロック内で変更するだけで動作するはずです – UlyssesR

0

短い答えは意味をなさないのでできません。多くのオブジェクトに基づいて単一のオブジェクトをソートする必要があります。

今度は、を最高のTypeまたは最大のTypeに基づいて並べ替えたい場合は、それは異なる質問と解決可能な問題になります。

ソートするには、「値」の質問に対する一貫した回答が必要です。多くの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%です。しかしデモンストレーション目的のために、それはあなたにオプションを示しています。