2009-11-26 4 views
4

Je possède environ 5 000 à 7 000 objets dans mon magasin de données de base que je veux afficher dans une vue de table. J'utilise un contrôleur de résultats récupéré et je n'ai pas de prédicats sur le fetch. Juste un tri sur un champ entier. L'objet se compose de quelques ints et de quelques chaînes qui contiennent entre 10 et 50 caractères. Mon problème est qu'il faut 10 bonnes secondes pour charger la vue. Est-ce normal? Je crois que la FRC gère des ensembles de données volumineux et des lots de handles et de telles choses pour permettre de grands ensembles de données. Y at-il des pièges courants ou quelque chose comme ça parce que je suis vraiment perplexe. J'ai réduit mon application à une seule vue de la table, mais il faut environ 10 secondes pour la charger. Et je laisse la vue de la table comme style par défaut et affiche simplement une chaîne dans la cellule.Données de base - Ensembles de données volumineux et temps de chargement très longs

Un conseil serait grandement apprécié!

Répondre

3

Dans votre requête de recherche, avez-vous utilisé -setFetchBatchSize: pour minimiser le nombre d'éléments récupérés en même temps (généralement, le nombre d'éléments à l'écran, plus quelques-uns pour un tampon)? Sans cela, l'utilisation d'un NSFetchedResultsController pour votre vue de table ne présentera pas autant d'avantages en termes de performances.

Vous pouvez également limiter les propriétés récupérées en utilisant -setPropertiesToFetch: dans votre requête de récupération. Il peut être préférable de limiter votre recherche aux seules propriétés de vos objets qui influenceront leur affichage dans la vue tabulaire. Le reste peut être chargé plus tard lorsque vous en avez besoin.

+0

Oui c'était ça! Je ne pouvais pas le croire, je pensais que le NSFetchedResultsController a manipulé tout cela! Vous devriez avoir lu correctement les documents et pensé à regarder NSFetchRequest plus en détail! N'est-ce pas -setPropertiesToFetch: juste pour le type de retour du dictionnaire? Il n'y en a pas du tout dans les docs et dans le guide de données de base il l'utilise simplement pour définir ce qu'il faut chercher dans un dictionnaire. Je serais très intéressé si cela fonctionne aussi pour les fetchs normaux. Si c'est vrai alors c'est dommage que ce ne soit pas mieux documenté! –

+0

-setPropertiesToFetch: est nouveau avec Core Data dans Snow Leopard et iPhone OS 3.0, donc la documentation n'a peut-être pas rattrapé son retard. À partir de la présentation sur le sujet qui a été donnée à la WWDC, il a été indiqué que cela fonctionne avec les requêtes de récupération normales et que seules les propriétés sélectionnées sont chargées en mémoire avec vos objets gérés. Si vous utilisez un accesseur pour une propriété non chargée, cette propriété sera chargée à partir de la base de données sur le disque à ce moment. –

+0

Ah super, merci pour votre aide, je vais leur donner un essai :-) Je pourrais jeter un oeil à ces vidéos WWDC, on dirait qu'ils seront intéressants! –

4

Avez-vous coché la case d'index pour le nombre entier sur lequel vous triez dans votre modèle de données de base?

+0

Merci pour cela, je n'ai jamais réalisé que vous pouviez indexer des champs! –

Questions connexes