2012-02-03 20 views
0

ではこれが私のviewDidLoad方法画像読み込み中 - コード

NSOperationQueue *queue = [NSOperationQueue new]; 
    NSInvocationOperation *op = [[NSInvocationOperation alloc] 
             initWithTarget:self 
             selector:@selector(downloadImage) 
             object:nil]; 
    [queue addOperation:op]; 

//他の方法での残りの部分で書かれています。

- (void)downloadImage{ 
    NSData* imageData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:person.picURL]]; 
    UIImage* image = [[UIImage alloc] initWithData:imageData] ; 


    [self showImage: image]; 
} 

上記のコードを[self showImage: image];より上に追加しようとしましたが、例外が発生しました。

1)[self performSelectorOnMainThread:@selector(showImage:) withObject:image waitUntilDone:NO];

2)[self performSelectorInBackground:@selector(showImage:) withObject:image];

//これはshowImageコードです。

- (void)showImage:(UIImage *)img { 

    if (img != nil) 
    {  
     myImageView = [[UIImageView alloc] initWithImage:img]; 

     myImageView.frame = CGRectMake(20, 20, 132, 124); 

     [scrollView addSubview:myImageView]; 

     [pictureOfPerson setImage:img];   
    } 
} 

私はAsynchronouslyに画像をダウンロードしてキャッシュしようとしています。画像はAsynchronouslyにダウンロードされますが、キャッシュされているかどうかはわかりません。画像をキャッシュし、画像をダウンロードしている間、ビュー負荷が再び

2)、私は別のビューに何をクリックした場合ときにそれを使用する方法

1)。その後、私はダウンロードを停止する必要があります。どうすればこのコードを書くことができますか?私はviewDidDissapearメソッドでそれを記述する必要があることを知っています。

3.)私のコードは正しいですか?私は何かを見逃してしまったのですか、これを行うにはより良いアプローチがありますか?そのチュートリアルやいくつかのサンプルコード場合

答えて

1

。 NSOperationよりもはるかに簡単です。ここでは例です:

UIImage *personPicture; 
personPicture = [self.imageCache objectForKey:person.picURL]; 
if (!personPicture) { 
    dispatch_async(dispatch_get_global_queue(0, 0), ^{ 
     NSData *imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:person.picURL]]; 
     personPicture = [UIImage imageWithData:imageData]; 
     [self.imageCache setObject:imageData forKey:person.picURL]; 
     dispatch_async(dispatch_get_main_queue(), ^{ 
      [self showImage:personPicture]; 
     }); 
    }); 
} 
else { 
    [self showImage:personPicture]; 
} 

あなたはUIImageデータを保存し、あなたのURLに関連付けることがNSMutableDictionaryのようなクラスのプロパティを使用することができます。存在する場合は使用し、そうでない場合はイメージをダウンロードします。

-EDIT-キャッシングを処理するためのコードを追加します。

+0

これをプログラムで行うにはどうすればよいですか? 'NSMutableDictionaryのようなクラスプロパティを使用してUIImageデータを格納し、URLに関連付けることができます。存在する場合は使用し、そうでない場合は画像をダウンロードしてください。 ' – shajem

+0

'self.imageCache'とは何ですか? – shajem

+0

imageCacheがNSMutableDictionaryになります。 –

1

あなたはこれを使用することができてください。私は、画像をダウンロードするにはGCDを使用したいSDWebImage