Question

J'ai une méthode qui permet de télécharger des images de manière asynchrone. Si les images sont liées à un tableau d'objets (une de cas d'utilisation commune dans l'application Je construis), je veux les mettre en cache. L'idée est, je passe un numéro d'index (sur la base indexPath.row de la table que je fais par chemin à travers), et je planque l'image statique NSMutableArray, calée sur la ligne de la table que je traite avec.

Thusly:

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

}

Mon index est en train de passer d'accord, je peux voir que par ma sortie NSLog. Mais même après mon insertObject: atIndex: appel, [imageCache count] ne quitte jamais zéro

.

Ceci est ma première incursion dans les variables statiques, donc je suppose que je fais quelque chose de mal.

(Le code ci-dessus est fortement élagué pour ne montrer que la chose principale de ce qui se passe, donc garder cela à l'esprit que vous regardez.)

Était-ce utile?

La solution

Vous semblez jamais initialiser le imageCache et probablement eu de la chance avec elle ayant la valeur 0. L'initialisation serait mieux fait dans la classe initialisation, par exemple:.

@implementation ImageDownloader
// ...
+(void)initialize {
    imageCache = [[NSMutableArray alloc] init];
}
// ...
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top