2014-12-08 11 views
19

Wie kann ich meine Realm-Ergebnisse mit mehreren Eigenschaften bestellen?Sortieren nach mehreren Eigenschaften mit Realm

Ich Sortierung sie zuerst eine Eigenschaft wie folgt aus:

allShows = Show.allObjects().sortedResultsUsingProperty("dateStart", ascending: true) 

Aber jetzt will ich auch eine zweite Art durch eine andere Eigenschaft „time“ tun. Ich versuchte es so:

allShows = Show.allObjects().sortedResultsUsingProperty("dateStart", ascending: true).sortedResultsUsingProperty("timeStart", ascending: true) 

Dies wird nur die Ergebnisse nur nach der zweiten Eigenschaft sortiert. Bitte helfen Sie.

Antwort

15

Figured es wie folgt aus:

let sortProperties = [RLMSortDescriptor(property: "dateStart", ascending: true), RLMSortDescriptor(property: "timeStart", ascending: true)] 
allShowsByDate = Show.allObjects().sortedResultsUsingDescriptors(sortProperties) 
+0

, die viel dazu beigetragen, dank – OthmanT

+1

Es sieht aus wie sie RLMSortDescriptor zu SortDescriptor –

+0

wie eine Idee, Refactoring, dies umzusetzen in RealmSwift? – raw3d

27

In RealmSwift können wir mehrere Eigenschaften wie folgt schreiben:

let sortProperties = [SortDescriptor(property: "dateStart", ascending: true), SortDescriptor(property: "timeStart", ascending: true)] 
allShowsByDate = Realm().objects(MyObjectType).sorted(sortProperties) 

Wenn Sie mehr Eigenschaften verwenden möchten, können Sie Werte von SortDescriptor() zu der hinzufügen Array.

+0

Wie kann ich mehrere Sortiervorgänge mit benutzerdefinierten Funktionen durchführen? – TomSawyer

+0

@TomSawyer können Sie diese Methode Art verwenden ({(erste Sekunde) -> Bool in wenn first.startDate.compare (second.startDate) == .Ascending { return true } else { return false } }) –

+0

@AIG Wenn es verschachtelte optionale Eigenschaft gibt, wie werden wir es sortieren. –

1

ich habe eine Lösung gefunden.

var dataSource: Results<DLVCasting>! = nil 
let realm = try! Realm() 
let sortDescriptors = [SortDescriptor(property: "someValue", ascending: false)] 
dataSource = realm.objects(MyClass.self).sorted(sortDescriptors); 
dataSource = dataSource.sorted("anotherValue", ascending: false) 

Aber wenn Sie mehr als eine Art descripton in Array wie Beispiel setzen unter

let sortDescriptors = [SortDescriptor(property: "someValue", ascending: false),SortDescriptor(property: "someValue", ascending: false)] 

wird dies nicht funktionieren. Ich verstehe wirklich nicht warum.

+0

Wenn ich mehr als eine Sortierung beschreibe, wird das auch nicht funktionieren. Ich verstehe wirklich nicht warum. –

1

Dies ist, wie es zu tun, wie der Realm 2,5

 dataArray = try! Realm().objects(Book.self) 
     .sorted(by: [SortDescriptor(keyPath: "Author", ascending: true), SortDescriptor(keyPath: "Title", ascending: true)]) 
Verwandte Themen