Domanda

Ho un metodo che scarica in modo asincrono immagini. Se le immagini sono legati a un array di oggetti (un caso d'uso comune nella app sto costruendo), voglio mettere in cache loro. L'idea è, passo in un numero di indice (basato sul indexPath.row del tavolo sto facendo dalla strada attraverso), e riporre l'immagine in una statica NSMutableArray, calettato sulla riga della tabella sto trattando con.

Questa convenzione:

@implementation ImageDownloader

...
@synthesize cacheIndex;

static NSMutableArray *imageCache;

-(void)startDownloadWithImageView:(UIImageView *)imageView andImageURL:(NSURL *)url withCacheIndex:(NSInteger)index
{
    self.theImageView = imageView;
    self.cacheIndex = index;
    NSLog(@"Called to download %@ for imageview %@", url, self.theImageView);


    if ([imageCache objectAtIndex:index]) {
        NSLog(@"We have this image cached--using that instead");
        self.theImageView.image = [imageCache objectAtIndex:index];
        return;
    }

    self.activeDownload = [NSMutableData data];

    NSURLConnection *conn = [[NSURLConnection alloc]
            initWithRequest:[NSURLRequest requestWithURL:url] delegate:self];
    self.imageConnection = conn;
    [conn release];
}

//build up the incoming data in self.activeDownload with calls to didReceiveData...

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    NSLog(@"Finished downloading.");

    UIImage *image = [[UIImage alloc] initWithData:self.activeDownload];
    self.theImageView.image = image;

    NSLog(@"Caching %@ for %d", self.theImageView.image, self.cacheIndex);
    [imageCache insertObject:image atIndex:self.cacheIndex];
    NSLog(@"Cache now has %d items", [imageCache count]);

    [image release];

}

Il mio indice è sempre attraverso il bene, posso vedere che la mia uscita NSLog. Ma anche dopo la mia InsertObject: atIndex: chiamata, [imageCache count] non lascia mai lo zero

.

Questa è la mia prima incursione nel variabili statiche, quindi presumo che sto facendo qualcosa di sbagliato.

(Il codice di cui sopra è fortemente potata per mostrare solo la cosa principale di quello che sta succedendo, in modo da tenere a mente, come la si guarda.)

È stato utile?

Soluzione

Sembra che tu non inizializzare il imageCache e, probabilmente, avuto fortuna con esso avendo la 0 valore. L'inizializzazione sarebbe meglio essere fatto in classe di inizializzazione, per esempio:.

@implementation ImageDownloader
// ...
+(void)initialize {
    imageCache = [[NSMutableArray alloc] init];
}
// ...
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top