Search code examples
iosswiftcore-datansfetchrequestnssortdescriptor

How to sort Core Data array based on Date Entered


I have a small Core Data Model which stores an array of Strings (search history).

When fetching the Data I'd like to sort by the time created. I currently just have one property in my model called searchHistory is there a way I can use the following code (key: to sort the data or will I need to add a time saved to the model?

let request = NSFetchRequest<NSFetchRequestResult>(entityName: entityName)
        request.sortDescriptors = [NSSortDescriptor.init(key: "", ascending: true)]

Solution

  • Yes, you need a second attribute declared as non-optional Date for example dateCreated. In the NSManagedObject subclass override awakeFromInsert to assign the current date when the record is created.

    override func awakeFromInsert() {
        super.awakeFromInsert()
        dateCreated = Date()
    }
    

    Then you can sort

    request.sortDescriptors = [NSSortDescriptor(key: "dateCreated", ascending: true)]
    

    in ascending order means the oldest entry comes first.