web-dev-qa-db-fra.com

Trier par date - Swift 3

J'ai un func getData () qui récupère l'entité de données de base, et je veux les trier par date. Comment puis-je appliquer NSPredicate ou Predicate pour obtenir les données de CoreData triées par date?

Mon entité de données principale: Entité: Dépenses Attributs: - montant - catégorie - date

func getData() {
    let context = appDelegate.persistentContainer.viewContext

    do {
        expenses = try context.fetch(Expenses.fetchRequest())
    } catch {
        print("Cannot fetch Expenses")
    }
}

Merci pour l'aide!

14
Kyle Anthony Dizon

Les prédicats servent à filtrer vos résultats de recherche. Pour les trier, vous devez utiliser un NSSortDescriptor. En supposant que vous avez un attribut sur votre entité Dépenses appelé date de type Date:

func getData() {
    let context = appDelegate.persistentContainer.viewContext  

    let fetchRequest = NSFetchRequest<Expenses>(entityName: "Expenses")
    let sort = NSSortDescriptor(key: #keyPath(Expenses.date), ascending: true)
    fetchRequest.sortDescriptors = [sort]
    do {
       expenses = try context.fetch(fetchRequest)
    } catch {
        print("Cannot fetch Expenses")
    }
}

EDIT: J'aurais dû mentionner que le sélecteur de tri est ajouté dans un tableau afin que plusieurs descripteurs de tri puissent être ajoutés si nécessaire. par exemple. trier d'abord par date, puis par nombre de pattes, puis par volume, etc.

39
Magnas

Vous avez besoin d'un descripteur de tri pour obtenir tous les objets dans un ordre spécifique.

let sectionSortDescriptor = NSSortDescriptor(key: "date", ascending: true)
let sortDescriptors = [sectionSortDescriptor]
fetchRequest.sortDescriptors = sortDescriptors
13
Boudhayan

Ma fonction consiste à faire une recherche de données dans Core Data et à trier les résultats par date "horodatage" dans l'ordre décroissant. "Ruta" est le nom de l'entité.

//Array of Ruta entity
    rutas = [Ruta]()

    func getData() {

        let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Ruta")
        let sort = NSSortDescriptor(key: "timestamp", ascending: false)
        request.sortDescriptors = [sort]

        do {
            rutas = try context.fetch(request) as! [Ruta]
        } catch {
            print("Fetching Failed")
        }
    }
2
oscar castellon

Pour obtenir les données qui sont finalement ajoutées au début, vous devez définir la clé du descripteur de tri comme ObjectId.

let sectionSortDescriptor = NSSortDescriptor(key: #keyPath(Entity.ObjectId)
ascending: false) fetchRequest.sortDescriptors = [sectionSortDescriptor]
0
RPK