Domanda

Sto usando il progetto Three20 per il mio iPhone app. Ho ristretto il mio problema verso il basso e ora sto solo cercando di ricreare il 'Web Immagini nella tabella' esempio che viene fornito con il progetto. Ho copiato il codice esattamente come nel progetto, con l'eccezione che io non uso il TTNavigator (che nell'esempio fa), ma sto aggiungendo il mio TTTableViewController manualmente ad un TabBar.

Il problema è il seguente; le immagini nella tabella devono caricare automaticamente dal web, come nell'esempio. Ma hanno solo carico dopo I scorrere la tabella su e giù.

Nella console si dice chiaramente che sta scaricando le immagini, e si vede l'indicatore di attività di filatura, come sempre .. E se non ho scorrere su e giù per una volta, non apparirà mai le immagini.

Chiunque? Grazie in anticipo.

P.S: Se sto usando questo codice in qualsiasi UIView casuale, anche non funziona (mostra solo un quadrato nero):

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

Se metto questo codice nel mio AppDelegate (a destra nella finestra), funziona .. strano?

POSSIBILI SOLUZIONI: Anche se ho smesso di usare TTImageView per questo scopo, penso che ho scoperto quale fosse il problema; filettatura (quindi accettare la risposta di Deniz Mert Edincik). Se ho iniziato il download asincrono (perché in fondo che è tutto il TTImageView è, una scarica asincrono) da nessuna parte, ma il thread principale, sarebbe non inizia. Se ho iniziato il download sul thread principale, sarebbe iniziare immediatamente ..

È stato utile?

Soluzione

suona come un problema di threading per me, stai creando TTImageView nel runloop principale?

Altri suggerimenti

trovo una cosa interessante. Quando uso combinazione TTTableViewController, TTTableViewDataSource e TTModel ho stesso problema con caricamento TTImageView. Il mio problema era che la mia applicazione di metodi Model 'IsLoading' e 'IsLoaded' non restituisce i valori corretti dopo l'inizializzazione del modello. Questo mi costringe a chiamare ricarica del modello manualy nel metodo 'viewDidAppear' e che causa problemi di caricamento delle immagini. Così ho riparare il mio 'IsLoading' e metodi 'IsLoaded' sia per il ritorno 'NO' dopo modello init, e tutto va bene.

Quando un'immagine finisce di caricare provare a inviare un messaggio reloadData alla visualizzazione della tabella. Questo costringe il tavolo per ricalcolare le dimensioni delle righe e ridisegnare la tabella. Basta stare attenti che non si avvia il download di nuovo l'immagine in risposta a questo messaggio.

Ho scritto qualcosa di simile a questo, dove la visualizzazione di un'immagine caricherà la propria immagine dal web.

Im la mia esperienza, quando l'immagine aveva caricato con successo, ma non è stato mostrato a suo parere, è stato un caso che la cellula doveva essere detto di ridisegnare.

Quando si scorre la visualizzazione della tabella, le celle sono impostati per ridisegnare quando il venire a video, che è il motivo per cui vengono visualizzate quando si scorre.

Al caricamento di immagini, raccontano la cella che si è seduto in ridisegnare inviandolo il messaggio setNeedsDisplay.

In questo modo, quando l'immagine finisce il download, la cellula seduta a (e solo quella cella) ridisegnerà sé per mostrare la nuova immagine.

E 'possibile che non si potrebbe bisogno di ridisegnare l'intera cella e potrebbe essere in grado di farla franca con sufficiente ridisegnare la visualizzazione dell'immagine utilizzando lo stesso metodo di chiamata. Nella mia esperienza, le mie cellule Table View gerarchia è stata schiacciata, così ho dovuto ridisegnare tutta la cella.

Non ho una risposta per quello che voglio da fare, ma devo dire che questo è considerato una caratteristica, e il comportamento previsto. Si utilizza TTImageView in UITableView quando si vuole fare lazy loading di immagini. TTImageView caricherà solo le immagini i cui telai sono visibili sullo schermo. In questo modo, il dispositivo utilizza le sue risorse di rete per scaricare le immagini che l'utente ha di fronte a loro, piuttosto che una serie di immagini che l'utente non è nemmeno cercando di guardare.

Si consideri avere una lunga lista che può contenere un paio di centinaia di immagini in miniatura (come una lista di amici). So per esperienza che se dare il via più di 100 richieste di immagine sui dispositivi più vecchi, l'utilizzo della memoria passerà attraverso il tetto, e la vostra applicazione sarà probabilmente in crash. TTImageView risolve questo problema.

Questo è un problema thread. È possibile caricare le immagini includendo la linea:

[TTURLRequestQueue mainQueue].suspended = NO;

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top