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!
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.
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
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")
}
}
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]