web-dev-qa-db-ja.com

レルムを使用して複数のプロパティで並べ替え

複数のプロパティを使用してレルムの結果を注文するにはどうすればよいですか?

私は最初に次のような1つのプロパティを使用してそれらをソートしています:

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

しかし今、私はまた別のプロパティ "timeStart"で二次ソートを行いたいと思っています。私はこのようにしてみました:

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

これは、結果を2番目のプロパティのみでソートするだけです。助けてください。

26
codeman

RealmSwiftでは、次のような複数のプロパティを記述できます。

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

さらに多くのプロパティを使用したい場合は、SortDescriptor()の値を配列に追加できます。

35
Yoshitaka

このように考え出した:

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

これは、レルム2.5での方法です。

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

Swift 4構文用に更新

let sortProperties = [SortDescriptor(keyPath: "queue"), SortDescriptor(keyPath: "name")]
let dogList = realm.objects(Dog.self).sorted(by: sortProperties)
3
Enkh-Amgalan Ch

私は解決策を見つけました。

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)

しかし、以下の例のように、配列に複数のソート記述子を配置した場合

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

これは機能しません。なぜか分かりません。

1
Nosov Pavel