Question

J'utilise le projet Three20 pour mon application iPhone. Je l'ai réduit mon problème vers le bas et je suis maintenant juste essayer de recréer les « Web Images dans le tableau » exemple qui vient avec le projet. J'ai copié le code exactement comme dans le projet, à l'exception que je ne pas utiliser le TTNavigator (dont l'exemple fait) mais je joins ma TTTableViewController manuellement à un tabBar.

Le problème est le suivant; les images de la table doivent charger automatiquement à partir du Web, comme dans l'exemple. Mais ils ne charge après I Faire défiler la table vers le haut et vers le bas.

Dans la console, il dit clairement qu'il télécharge les images, et vous voyez l'indicateur d'activité tourne comme toujours .. Et à moins que je défiler vers le haut et vers le bas une fois, les images ne seront jamais apparaître.

Tout le monde? Merci à l'avance.

P.S: Si j'utilise ce code dans une UIView aléatoire, Il ne fonctionne pas (seulement montre un carré noir):

TTImageView* imageView = [[[TTImageView alloc] initWithFrame:CGRectMake(30, 30, 100, 100)] autorelease];
imageView.autoresizesToImage = YES;
imageView.URL = @"http://webpimp.nl/logo.png";
[self.view addSubview:imageView];

Si je mets ce code dans mon AppDelegate (à droite sur la fenêtre), il fonctionne .. étrange?

SOLUTION POSSIBLE: Bien que je me suis arrêté à l'aide TTImageView à cet effet, je ne pense que j'ai découvert quel était le problème; filetage (donc accepter la réponse de Deniz Mert Edincik). Si j'ai commencé le téléchargement asynchrone (car au fond qui est tout le TTImageView est, un téléchargement asynchrone) partout mais le fil conducteur, il ne démarre pas. Si j'ai commencé le téléchargement sur le thread principal, il commencerait immédiatement ..

Était-ce utile?

La solution

Sons comme un problème de thread pour moi, vous créez TTImageView dans la principale runloop?

Autres conseils

Je trouve une chose intéressante. Lorsque j'utilise TTTableViewController combinaison, TTTableViewDataSource et TTModel j'ai même problème avec le chargement TTImageView. Mon problème était que ma mise en œuvre de la isLoading de «méthodes modèle et « IsLoaded » ne renvoient pas les valeurs appropriées après l'initialisation du modèle. Cela me oblige à appeler reload le modèle manualy dans la méthode « viewDidAppear » et qui cause problème de chargement d'image. Donc je réparer mon « isLoading » et des méthodes « IsLoaded » à la fois le retour « NON » après le modèle init, et tout va bien.

Lorsqu'une image se termine, essayez de charger l'envoi d'un message reloadData à la vue de la table. Cela force la table à recalculer la taille des lignes et redessiner la table. Faites juste attention que vous ne commencez pas à télécharger à nouveau l'image en réponse à ce message.

J'ai écrit quelque chose de semblable à celui-ci où une vue d'image chargera sa propre image à partir du Web.

Im mon expérience, lorsque l'image avait chargé avec succès mais n'a pas été montré à son avis, il était un cas que la cellule avait besoin d'être dit à redessiner.

Lorsque vous faites défiler l'affichage du tableau, les cellules sont mises à redessiner lorsque l'écran viennent, ce qui explique pourquoi ils apparaissent lorsque vous faites défiler.

Lorsque les charges d'image, indiquent la cellule qu'il est assis pour redessiner en lui envoyant le setNeedsDisplay message.

De cette façon, lorsque l'image se termine le téléchargement, la cellule de sa séance en (et seulement cette cellule) va se redessiner pour montrer la nouvelle image.

Il est possible que vous ne pourriez pas besoin de redessiner l'ensemble de la cellule et peut-être en mesure de sortir avec redessiner simplement l'affichage de l'image en utilisant le même appel de méthode. Dans mon expérience, mes cellules de table vue hiérarchique a été aplatie, donc je devais redessiner toute la cellule.

Je n'ai pas de réponse pour ce que vous veux à faire, mais je dirai que cela est considéré comme une caractéristique et le comportement attendu. Vous utilisez TTImageView dans UITableView lorsque vous voulez faire le chargement paresseux des images. TTImageView ne chargera les images dont les images sont visibles à l'écran. De cette façon, l'appareil utilise ses ressources réseau pour télécharger des images que l'utilisateur a en face d'eux, au lieu d'un tas d'images que l'utilisateur n'essaie même pas regarder.

Envisager d'avoir une longue liste qui peut contenir quelques centaines d'images miniatures (comme une liste d'amis). Je sais par expérience que si vous le coup d'envoi 100+ demandes d'images sur les appareils plus anciens, l'utilisation de la mémoire passera par le toit, et votre application va probablement planter. TTImageView résout ce problème.

Ceci est un problème de fil. Vous pouvez charger les images en incluant la ligne:

[TTURLRequestQueue mainQueue].suspended = NO;

- (void)didLoadModel:(BOOL)firstTime.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top