2014-12-08 3 views
19

Jak mogę zamówić wyniki w obszarze za pomocą wielu właściwości?Zamówienie według wielu właściwości za pomocą domeny Realm

mam sortując je najpierw stosując jedną właściwość tak:

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

Ale teraz chcę też zrobić coś w rodzaju wtórnego przez innego mienia „timeStart”. Próbowałem w ten sposób:

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

Po prostu wyniki będą sortowane tylko według drugiej właściwości. Proszę pomóż.

Odpowiedz

15

Zdobione tak:

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

że pomogło, dzięki – OthmanT

+1

Wygląda na to, że refactored RLMSortDescriptor do SortDescriptor –

+0

jakiś pomysł jak zaimplementować to w RealmSwift? – raw3d

27

W RealmSwift możemy napisać wiele właściwości tak:

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

Jeśli chcesz użyć więcej właściwości, można dodać wartości z SortDescriptor() do szyk.

+0

Jak wykonać wielokrotne sortowanie przy użyciu funkcji niestandardowej? – TomSawyer

+0

@TomSawyer Można użyć Ta metoda sort ({(pierwszy, drugi) -> Bool w jeśli first.startDate.compare (second.startDate) == .Ascending { powrót prawda } else {return false } }) –

+0

@AIG Jeśli istnieje zagnieżdżona opcjonalna właściwość, jak ją posortujemy. –

1

znalazłem rozwiązanie.

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) 

Ale jeśli umieścić więcej niż jeden rodzaj descripton w tablicy jak przykład poniżej

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

to nie będzie działać. Naprawdę nie rozumiem, dlaczego.

+0

Jeśli wstawię więcej niż jeden opis sortowania, to również nie będzie działać. Naprawdę nie rozumiem, dlaczego też. –

1

To jak to zrobić, jak z Realm 2,5

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