2017-05-02 4 views
0

In meiner Coredata habe ich zwei Entitäten (Profil, Foto). Profile hat eine toMany-Beziehung (Fotos) zu Photo.Core Data Relation: Filtern und Sortieren

Ich bin die Fotos zugreifen können:

// 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'")) 

Gibt es eine einfache Möglichkeit, Filterung zu kombinieren und Sortieren unter Verwendung der Relation oder habe ich zu Kiste eine separate NSFetchRequest?

+1

Warum versuchen Sie nicht eine 'gefiltert (unter Verwendung von:) anzuwenden' auf das Ergebnis der 'sortedArray (mit:)'? Aber vergiss nicht, das Ergebnis von 'sortedArray..' in' NSArray' zu schreiben, bevor du 'filtered' anrufst. – Toldy

Antwort

0

Wie pro mein Verständnis, Ihre Frage nicht auf Kerndaten verbunden ist, um es zu Sortieren und Filtern auf demselben Array verbunden ist, so versuchen Sie bitte Code folgende

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

Als eine andere Art und Weise, wenn Sie nicht tun Wenn Sie das explizite Filtern und Sortieren nach Ergebnisarray hinzufügen möchten, können Sie eine Abrufanforderung erstellen und das Prädikat mit dem Sortierungsdeskriptor hinzufügen, damit Sie das erwartete Ergebnis erhalten.

+0

Das funktioniert auch für mich. Ich weiß nicht, welches die bessere Lösung ist, also werde ich die angenommene Antwort nach den Stimmen wählen. –

0

Dank Toldy, das funktioniert für mich:

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