web-dev-qa-db-fra.com

Core Data NSFetchedResultsController - Nombre total d'enregistrements renvoyés

J'utilise un NSFetchedResultsController dans une application iPhone et je me demande s'il existe un moyen simple d'obtenir le nombre total de lignes renvoyées dans toutes les sections.

Au lieu d'obtenir le nombre [[fetchedResultsController sections]], puis de parcourir en boucle chaque section pour obtenir son nombre, peut-il être effectué sur une seule ligne?

Merci!

39
Neal L

Cette ligne retourne le nombre total d'objets récupérés:

[fetchedResultsController.fetchedObjects count]
110
gerry3

Celui-ci, ça va?

[fetchedResultsController.sections.valueForKeyPath: @"@sum.numberOfObjects"];

Cela ne touchera pas du tout les objets récupérés, il est donc garanti de ne pas leur en vouloir.

14
Max Desiatov

Rapide.

fetchedResultsController.fetchedObjects?.count

3
jstn

Swift 4:

La suggestion de Max Desiatov comme extension de Swift:

import Foundation
import CoreData

extension NSFetchedResultsController {

    @objc var fetchedObjectsCount: Int {
        // Avoid actually fetching the objects. Just count them. Why is there no API like this on NSFetchResultsController?
        let count = sections?.reduce(0, { (sum, sectionInfo) -> Int in
            return sum + sectionInfo.numberOfObjects
        }) ?? 0
        return count
    }
}

Usage:

let objectCount = fetchedResultsController.fetchedObjectCount

Ou faites-le comme une routine en ligne:

// Avoid actually fetching objects. Just count them.
let objectCount = fetchedResultsController.sections?.reduce(0, { $0 + $1.numberOfObjects }) ?? 0

Remarque: Le @objc est nécessaire pour éviter cette erreur de compilation:

L'extension d'une classe Objective-C générique ne peut pas accéder aux paramètres génériques de la classe à l'exécution

(Voir Comment écrire une extension pour NSFetchedResultsController dans Swift 4 )

0
Bill Feth