2010-12-03 15 views
1

J'ai un TableViewController qui affiche une liste des éléments de la relation CoreData. Dans mon cellForRowAtIndexPath :, j'obtiens un sortedArray de l'ensemble, puis j'accède à l'élément à indexPath.row. Ensuite, dans didSelectRowAtIndexPath :, je fais la même chose.Est-il correct de ré-trier un tableau chaque fois que vous avez besoin d'accéder à un élément à un index spécifique?

Est-ce considéré comme une mauvaise pratique? Je vois un danger théorique en ce que si ma méthode de tri renvoie un tableau trié différemment sur un appel ultérieur, je pourrais finir par interagir avec l'objet B, même si l'utilisateur a cliqué sur la cellule qui a montré l'objet A. Cela ne devrait pas être possible mon tri pour retourner un tableau trié différemment, mais je pense toujours que c'est techniquement risqué. La seule autre façon que je connaisse de faire ceci est que mon tableViewController garde son propre membre NSArray, et quand il se charge pour la première fois, remplissez le tableau en triant l'ensemble. Le seul problème avec ceci est que je devrais alors maintenir séparément l'ensemble et le tableau; modifier, insérer ou supprimer des objets à la fois chaque fois que l'utilisateur change quelque chose. Est-ce considéré comme le moyen "correct" d'afficher les éléments CoreData dans une table?

Répondre

2

J'irais certainement avec l'option B. Même si vous maintenez vos données de modèle, et la rangée dans votre contrôleur, ceci ne devrait pas être trop difficile. ajouter/supprimer des éléments du contrôleur nécessiterait une mise à jour du modèle. Non seulement vous contournez votre problème de risque de duplication de données, mais vous constaterez un gain important en termes de performances, car vous n'achetez pas un tableau nouvellement trié chaque fois que vous l'appelez.

+0

Eh bien, je viens de passer une demi-heure à déboguer une erreur qui a été provoquée parce que je mettais à jour mon ensemble et j'attendais que mon classedArray reflète toujours ce qui était dans ma tableView. Donc, je pense que cela vous prouve à peu près juste. Aussi, bien que je ne sois pas vraiment concerné par les performances (mon set ne contient que 6 éléments), c'est beaucoup plus difficile de déboguer lorsque je dois passer par la méthode de tri des dizaines de fois. – GendoIkari

2

Définir "OK". Ce n'est probablement pas aussi efficace si vous triez les mêmes touches de la même manière à chaque fois. D'un autre côté, les cycles sont bon marché; Si vous n'êtes pas inquiet au sujet de la performance et c'est le moyen le plus clair, alors allez-y.

Ce que vous semblez demander à propos de "triés de la même manière à chaque fois" est ce qu'on appelle un "tri stable". Demandez-vous ceci: si l'ordre de quelque chose d'autre que la clé (s) utilisée, alors pourquoi ne pas vous trier par ceux aussi?

+0

+1 pour le terme "tri stable". – GendoIkari