2010-08-15 4 views
1

Je développe une application iOS et j'ai quelques problèmes pour décider comment aborder un problème. J'utilise deux UITableViewControllers pour afficher différentes vues des mêmes données. L'un est une liste principale, et l'autre ne contient que des éléments marqués comme "favoris". Aussi les éléments sont de hauteur variable, donc j'utilise "heightForRowAtIndexPath" pour indiquer la hauteur de chaque élément. Le problème est la vitesse, quand je passe d'une vue à l'autre, il faut la mettre à jour pour afficher les changements effectués dans l'autre (marqué favori/défavorable).iOS - mise en page double liste

Solution # 1:

Recharger les données à chaque fois une vue de la table devient visible. Cela ne fonctionne pas bien parce que bien que les données soient affichées en utilisant un chargement paresseux, le "heightForRowAtIndexPath" est appelé pour chaque élément avant que toutes les données sont chargées, et son lent. sur mon iPhone 4 une liste d'environ 300 éléments prend environ quatre secondes à charger, même si les valeurs de hauteur sont mises en cache (le goulot d'étranglement est l'application de la hauteur, ne pas le récupérer).

 

Solution # 2:

manuellement les tables manipuler lorsque des modifications sont apportées. Je n'ai pas essayé cela, mais ce serait probablement bogué. Tes pensées?

 

Solution # 3:

L'utilisation d'un système de type de notification pour notifier à l'autre tableau des mises à jour des éléments qui pourraient actuellement être chargés. Je n'ai pas essayé cela, parce que cela semble aller au-delà et peut ne pas fonctionner du tout.

Est-ce que quelqu'un connaît un moyen facile d'afficher deux vues des mêmes données?

Répondre

1

Vous pouvez recharger n lignes avec reloadRowsAtIndexPaths: withRowAnimation. Je ne l'ai jamais fait, mais je pense que c'est là parce que c'est plus rapide, alors vous pourriez vouloir l'essayer.

Sur le heightForRow: thingy, je me souviens d'avoir lu dans les docs d'Apple que cette fonction est en effet un tueur pour la performance. Peut-être pourriez-vous prendre la hauteur maximale des lignes et la définir dans UITableView.rowHeight?

+0

En effet. - (void) reloadRowsAtIndexPaths: (NSArray *) indexPaths avecRowAnimation: (UITableViewRowAnimation) animation –

+0

Ouais heightForRowAtIndexPath est très lent, mais je ne pense pas que l'application semblerait correcte avec des lignes de taille identique. La seule alternative que je considérerai pour l'accélérer est peut-être de sérialiser la vue de la table et de la désérialiser quand la NIB se charge. Je ne sais pas si c'est possible mais c'est une idée. – Nippysaurus

+0

@Nippysaurus: Désolé pour le commentaire tardif. Je ne connais pas d'autres moyens d'accélérer cela. Que voulez-vous dire par (dé) sérialiser la tableview? – Nick