How to sort Results in Realm

Viewed 4200

I am using Realm with Swift. I want to sort "pictures" saved in Realm by PhotoCollectionViewController in the reverse order of date. I don't know what should I do. I would be pleased if you could lend me your wisdom.

Models.swift

import RealmSwift

class Entry: Object {
    @objc dynamic var text = ""
    @objc dynamic var date = Date()
    let pictures = List<Picture>()
    }
class Picture: Object {
    @objc dynamic var fullImageName = ""
    @objc dynamic var thumbnailName = ""
    @objc dynamic var entry : Entry?
    }

PhotoCollectionViewController.swift

import UIKit
import RealmSwift

class PhotoCollectionViewController: UICollectionViewController, UICollectionViewDelegateFlowLayout {

    var pictures : Results<Picture>?

    override func viewWillAppear(_ animated: Bool) {
        getPictures()
    }

    func getPictures() {
        if let realm = try? Realm() {
            pictures = realm.objects(Picture.self)
            //I want to sort pictures in the reverse order of date
            collectionView?.reloadData()
        }
    }
…
}
3 Answers

You should be able to sort it with the following code

realm.objects(Picture.self).sorted(byKeyPath: "date", ascending: false)

Sorry I solved it myself. I changed "pictures" as follows, I was able to do what I expected.

pictures = realm.objects(Picture.self).sorted(byKeyPath: "entry.date", ascending: false)

Thank you for the answers and advice.

If I understood correctly, you want to sort the Entry objects and then flatMap to a bunch of Pictures:

var pictures = realm.objects(Entry.self)
                   .sorted(byKeyPath: "date", ascending: false)
                   .flatMap { $0.pictures }
Related