2017-05-02 8 views
0

私のコアデータには2つのエンティティ(プロファイル、写真)があります。プロフィールに写真との関係(写真)があります。コアデータ関係:フィルタとソート

私は写真にアクセスすることができるよ:

// all 
let photos = profile.photos?.allObjects 

// sorted 
let photos = profile.photos?.sortedArray(using: [NSSortDescriptor(key: "ordering", ascending: true)]) 

// filtered 
let photos = profile.photos?.filtered(using: NSPredicate(format: "type = 'x'")) 

は、フィルタリングを結合する簡単な方法があり、関係を使用して並べ替えたり、私がクレート別のNSFetchRequestする必要がありますか?

+1

あなたは '(使用:)フィルタ適用しようとしないのはなぜ:' 'sortedArray(使用)の結果には、'?しかし、 'filterededArray..'の結果を' NSArray'にキャストしてから 'filtered'を呼び出すことを忘れないでください。 – Toldy

答えて

0

、あなたの質問は、コアデータに関連していない私の理解あたりとしては、それは同じ配列のソートやフィルタリングに関連している、そうでない場合はそう、別の方法として、次のコード

let photos = profile.photos?.allObjects 
let result = photos 
       .filter { $0.type == "x" } 
       .sort { $0.ordering < $1.ordering } 

を試してみてください明示的なフィルタと結果配列のソートを追加したい場合は、フェッチ要求を作成し、ソート記述子を持つ述語を追加することで、期待通りの結果を得ることができます。

+0

これは私にとっても有効です。私はどちらが良い解決策であるかわからないので、私は投票に応じて受け入れられた答えを選択します。 –

0

おかげToldyが、これは私の作品:

var photos = profile.photos?.sortedArray(using: [NSSortDescriptor(key: "ordering", ascending: true)]) as! [Photo] as NSArray 
photos = photos.filtered(using: NSPredicate(format: "type = 'x'")) as NSArray 
関連する問題