Frage

Ich bin mit dem three20 Projekt für mein iPhone App. Ich habe mein Problem eingrenzen und ich bin jetzt nur versuchen, die ‚Web Bilder in der Tabelle‘ Beispiel neu zu erstellen, die mit dem Projekt kommt. Ich habe den Code kopiert genau wie im Projekt, mit der Ausnahme, dass ich nicht die TTNavigator (was das Beispiel der Fall ist), aber ich bin das Hinzufügen meines TTTableViewController manuell auf einen tabBar.

Das Problem ist wie folgt; die Bilder in der Tabelle automatisch aus dem Internet, wie im Beispiel laden. Aber sie nur Last nach ich blättern die Tabelle nach oben und unten.

In der Konsole sagt es klar ist es die Bilder herunterzuladen, und Sie sehen die Aktivitätsanzeige wie immer Spinnen .. Und wenn ich nach oben und einmal nach unten, werden die Bilder nicht angezeigt werden.

Wer? Vielen Dank im Voraus.

P. S: Wenn ich diesen Code in jeder beliebigen UIView bin mit, es funktioniert auch nicht (nur ein schwarzes Quadrat zeigt):

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];

Wenn ich diesen Code in meinem AppDelegate setzen (rechts auf das Fenster), es funktioniert .. seltsam?

MÖGLICHE LÖSUNG: Obwohl ich mit TTImageView für diesen Zweck angehalten, ich glaube ich herausgefunden, was das Problem war; Threading (daher die Annahme, die Antwort von Deniz Mert Edincik). Wenn ich den asynchronen Download gestartet (weil im Grunde, dass sich die ganze TTImageView ist ein asynchroner Download) von überall, aber der rote Faden, wäre es nicht starten. Wenn ich den Download auf dem Haupt-Thread gestartet, wäre es sofort beginnen ..

War es hilfreich?

Lösung

Klingt wie ein Einfädeln Problem für mich, erstellen Sie TTImageView im Haupt Runloop?

Andere Tipps

Ich finde eine interessante Sache. Wenn ich Kombination TTTableViewController verwenden, TTTableViewDataSource und TTModel Ich habe gleiche Problem mit dem Laden TTImageView. Mein Problem war, dass meine Implementierung von Modell Methoden ‚isLoading‘ und ‚isLoaded‘ nicht zurück richtige Werte nach der Initialisierung des Modells. Das zwingt mich reload auf Modell zu nennen manualy in ‚viewDidAppear‘ Methode und das verursacht Bildladeproblem. So reparieren ich meine ‚isLoading‘ und ‚isLoaded‘ Methoden sowohl Rückkehr ‚NO‘ nach Modell init, und alles ist in Ordnung.

Wenn ein Bild geladen Versuch beendet eine reload Nachricht an die Tabellenansicht zu senden. Dies zwingt die Tabelle, die die Größe der Zeilen neu zu berechnen und die Tabelle neu zu zeichnen. Nur vorsichtig sein, dass Sie nicht anfangen, um das Bild wieder in Reaktion auf diese Nachricht heruntergeladen werden.

ich etwas ähnliches wie dies geschrieben habe, wo eine Bildansicht, sein eigenes Bild aus dem Internet geladen wird.

Im meine Erfahrung, wenn das Bild erfolgreich war geladen, wurde aber in seiner Ansicht nicht gezeigt, es war ein Fall, dass die Zelle benötigt gesagt werden, neu zu zeichnen.

Wenn Sie die Tabellenansicht bewegen, werden die Zellen auf neu zu zeichnen, wenn der Bildschirm kommen, weshalb sie erscheinen, wenn Sie blättern.

Wenn die Bild Lasten, sagen die Zelle, die es in sitzt durch neu zu zeichnen sie die Nachricht setNeedsDisplay senden.

Auf diese Weise, wenn das Bild Download abgeschlossen ist, die Zelle ihre Sitzung in (und nur diese Zelle) wird neu zeichnet sich das neue Bild zu zeigen.

Es ist möglich, dass Sie nicht die gesamte Zelle neu zu zeichnen sollten und könnten in der Lage sein, mit einfach neu zu zeichnen die Bildansicht mit der gleichen Methode Aufruf wegzukommen. Meiner Erfahrung nach Ansicht meiner Tabellenzellen wurde Hierarchie abgeflacht, so hatte ich die ganze Zelle neu zu zeichnen.

Ich habe eine Antwort nicht für das, was Sie will zu tun, aber ich werde sagen, dass dies ein Merkmal betrachtet wird, und das erwartete Verhalten. Sie verwenden TTImageView in UITableView, wenn Sie verzögertes Laden von Bildern tun mögen. TTImageView lädt nur die Bilder, deren Rahmen werden auf dem Bildschirm sichtbar. Auf diese Weise verwendet das Gerät seine Netzwerkressourcen zum Herunterladen von Bildern, die der Benutzer vor ihnen hat, anstatt eine Reihe von Bildern, die der Benutzer nicht einmal versucht, zu betrachten.

Betrachten wir eine lange Liste mit, die ein paar hundert Miniaturbilder (wie eine Liste von Freunden) enthalten. Ich weiß aus Erfahrung, dass, wenn Sie mehr als 100 Bildanfragen auf älteren Geräten beginnen, die Speichernutzung durch die Decke gehen, und Ihre Anwendung wird wahrscheinlich zum Absturz bringen. TTImageView löst dieses Problem.

Dies ist ein Thread Problem. Sie können die Bilder laden, indem Sie die Zeile mit:

[TTURLRequestQueue mainQueue].suspended = NO;

in - (void)didLoadModel:(BOOL)firstTime.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top