Frage

Ich habe eine Methode, die asynchron Bilder herunterlädt. Wenn die Bilder auf ein Array von Objekten (ein gemeinsamer Anwendungsfall in der App Ich baue) verwendet sind, möchte ich sie zwischenzuspeichern. Die Idee ist, I in einer Indexnummer übergeben (bezogen auf die indexPath.row des Tisches durch durch Ich mache) und I verstauen das Bild in einem statischen NSMutableArray, auf der Zeile der Tabelle verkeilt ich tun mit.

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

}

Mein Index wird durch in Ordnung bekommt, kann ich sehen, dass durch meine NSLog Ausgabe. Aber auch nach meiner insert: atIndex: Anruf, [imageCache count] nie Blätter Null

.

Dies ist mein erster Ausflug in der statischen Variablen, so nehme ich an mir etwas falsch mache.

(Der obige Code ist stark nur die Hauptsache zu zeigen, beschnitten, was los ist, so trägt, dass im Sinne, als man es betrachtet.)

War es hilfreich?

Lösung

Sie scheinen nie die imageCache zu initialisieren und wahrscheinlich Glück kam damit den Wert 0 haben. Die Initialisierung würde am besten in der Klasse Initialisierung erfolgen, z.

@implementation ImageDownloader
// ...
+(void)initialize {
    imageCache = [[NSMutableArray alloc] init];
}
// ...
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top