J'ai beaucoup lu sur les données de base ... mais quel est un moyen efficace de faire un compte sur un type d'entité (comme SQL peut le faire avec SELECT count (1) ...). Maintenant, je viens de résoudre cette tâche en sélectionnant tout avec NSFetchedResultsController
et en obtenant le nombre de NSArray
! Je suis sûr que ce n'est pas la meilleure façon ...
objective-c
core-data
Erazorx
la source
la source
countForFetchRequest:error:
états quiNSNotFound
est renvoyée en cas d'erreur. En général, laNSError
manipulation dans la convention Cocoa est que la valeur deerr
est indéfinie (et souvent dangereuse) si aucune erreur ne se produit.Pour être clair, vous ne comptez pas les entités, mais les instances d'une entité particulière. (Pour compter littéralement les entités, demandez au modèle d'objet géré le nombre de ses entités.)
Pour compter toutes les instances d'une entité donnée sans récupérer toutes les données, utilisez
-countForFetchRequest:
.Par exemple:
la source
Rapide
Il est assez facile d'obtenir un décompte du nombre total d'instances d'une entité dans Core Data:
J'ai testé cela dans le simulateur avec plus de 400 000 objets et le résultat était assez rapide (mais pas instantané).
la source
J'ajouterai simplement cela pour le rendre encore plus efficace ... et parce que c'est juste un décompte, vous n'avez pas vraiment besoin de valeur de propriété et certainement comme l'un des exemples de code ci-dessus, vous n'avez pas besoin de sous-entités non plus.
Donc, le code devrait être comme ceci:
J'espère que ça aide.
la source
Je pense que le moyen le plus simple et le plus efficace de compter les objets est de définir le
NSFetchRequest
type de résultatNSCountResultType
et de l'exécuter avecNSManagedObjectContext countForFetchRequest:error:
méthode.la source
J'ai écrit une méthode utilitaire simple pour Swift 3 pour récupérer le nombre d'objets.
la source
Dans Swift 3
la source
C'est vraiment juste ceci:
"Bateau" est simplement le nom de l'entité sur votre écran de modèle de données:
Qu'est-ce que le global
yourContainer
?Pour utiliser les données de base, à un moment donné de votre application, une seule fois, il vous suffit d'aller
où «stuff» est simplement le nom du fichier de modèle de données.
Vous auriez simplement un singleton pour ça,
Donc de n'importe où dans l'application
est votre conteneur,
Donc, dans la pratique, pour obtenir le décompte de n'importe quelle entité, c'est juste
la source
Si vous voulez trouver le compte pour une récupération prédiquée spécifique, je pense que c'est le meilleur moyen:
la source