J'ai une question basique. Supposons que vous ayez une demande NSFetchRequest que vous souhaitez effectuer sur un NSManagedObjectContext. Si la requête d'extraction n'a pas de descripteurs de tri définis explicitement, les objets seront-ils aléatoires à chaque fois, ou vont-ils être crachés dans un tableau dans l'ordre dans lequel ils ont été ajoutés au contexte d'objet géré initialement? Je ne trouve pas cette réponse nulle part dans la documentation.Les extractions de données de base (NSFetchRequest) sont-elles triées de façon spécifique par défaut?
Répondre
Non, ils ne sont pas garantis d'être commandés. Vous pourriez voir des commandes cohérentes selon le type de magasin de données que vous utilisez (je n'ai jamais essayé), mais ce n'est pas quelque chose dont vous devriez dépendre.
Cependant, il est facile de commander par date de création. Ajoutez simplement un attribut de date à votre entité, initialisez-le à la date actuelle dans awakeFromInsert
, et spécifiez ce descripteur de tri dans votre recherche.
La commande peut ne pas être "aléatoire à chaque fois" mais pour autant que je sache, vous ne pouvez pas/ne devez pas en dépendre. Si vous avez besoin d'une commande spécifique, utilisez des descripteurs de tri.
Je vois deux questions ici: va-t-elle sortir dans le même ordre à chaque fois? Et, est-ce la commande sur ordre d'insertion?
Il sort dans l'ordre, ce qui est dans un certain ordre. Notez que NSSet n'est qu'une interface et que des classes privées implémentent NSSet. Cela signifie que si certaines instances de NSSet vous reviennent si vous appelez allObjects par rapport à elles, elles peuvent être retournées dans un ordre cohérent, c'est presque assurément dans un ordre de hachage car les ensembles sont presque universellement implémentés comme dictionnaires hachés. Puisque l'algorithme de hachage est très variable selon ce qui est stocké et comment il est haché, vous pourriez avoir de la chance qu'il apparaisse dans le même ordre à chaque fois, mais ensuite être pris au dépourvu quand quelque chose change très légèrement. Donc, techniquement, ce n'est pas vraiment aléatoire et ça pourrait être dans un ordre stable.
À la deuxième question, je dirais qu'il est presque assurément pas dans l'ordre d'insertion.
La suggestion de Marc pour gérer awakeFromInsert est une bonne chose, et ce que vous voulez.
Il n'y a aucune garantie sur la commande. Par exemple, je pourrais implémenter un NSAtomicStore ou NSIncrementalStore qui retourne les résultats dans un ordre aléatoire et ce serait complètement correct. J'ai vu le magasin SQLite retourner des commandes différentes sur différentes versions du système d'exploitation.
- 1. Meilleure façon d'afficher les valeurs par défaut pour les champs vides renvoyés à partir d'une requête de base de données?
- 2. Les données XML sont triées
- 3. FluentNHibernate - Définition de la valeur par défaut pour les colonnes de base de données (SQL Server)
- 4. Données de base NSPredicate pour les relations
- 5. Impossible d'ouvrir la base de données par défaut de l'utilisateur. erreur d'ouverture de session de connexion
- 6. Rails Migrations: Charger les données par défaut
- 7. Comment créer une demande NSFetchRequest qui filtre les objets de données de base en fonction des attributs AND relations?
- 8. Structure de la base de données pour les données de base remplacées sélectivement par client
- 9. Meilleure façon de synchroniser la base de données client avec la base de données du serveur
- 10. Comment localiser la valeur par défaut d'un attribut dans une entité de données de base
- 11. connexions de base de données NHibernate défaut sous charge
- 12. contenu de la base de données par défaut pour la zone de texte en format html
- 13. Trouver tous les objets de base de données par nom?
- 14. Meilleure façon de modifier/formater les données de base de données dans le contrôleur?
- 15. Make Test.QuickCheck.Batch utilise un type par défaut pour tester les fonctions de la liste
- 16. Comment récupérer les données triées à partir d'un gridview DataBound?
- 17. Conventions par défaut de NHibernate par défaut
- 18. Pour définir une valeur par défaut pour une colonne dans une base de données par PostgreSQL
- 19. Chaîne vide Valeur par défaut dans le concepteur de données de base iphone
- 20. Connexion de base de données par défaut du fournisseur SQL ADO.NET
- 21. Outlook + Perl + Win32 :: Ole: Comment sélectionnez-vous les entrées de calendrier triées par date?
- 22. problème de base de données: Récupérer une traduction par défaut d'une table
- 23. meilleure façon de faire par défaut param = une variable?
- 24. Modifier le format d'heure date par défaut dans une base de données unique dans SQL Server
- 25. Vue par défaut de l'élément de liste par défaut Sharepoint
- 26. Quelle est la meilleure façon d'interroger le nombre de lignes à partir des données de base?
- 27. Core Data NSFetchRequest problème
- 28. Créer une base de données avec un emplacement de données spécifique dans MySQL pour une base de données
- 29. Où dois-je conserver les données de base et les méthodes de commodité?
- 30. Comment modifier de façon permanente les paramètres régionaux par défaut de Java sur Windows