Flickerから画像をダウンロードするアプリケーション(Xcode 4.5)があります。各写真の場所のピンをドロップするマップビューがあります。ピンをクリックすると、写真の名前とその画像のサムネイルを示す注釈が表示されます。メインスレッドからサムネイル画像をダウンロードすることを決定するまで、すべてが正常に機能していました(マルチスレッドでの最初の試み)。私が現在持っているコードでは、注釈はサムネイルを表示しなくなりました。
このタスクを実行するために設定した4つのメソッドがあります。4番目のメソッドは呼び出されていません。私は誰かがこのコードを見て、明らかなエラーやこれを試みる別の方法を指摘できることを望んでいます:
私のmapviewコントローラークラスでは:
//an annotation was selected
- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)aView
{
self.currentAnnotationView = [[MKAnnotationView alloc]init];
self.currentAnnotationView = aView;
[self.delegate mapViewController:self
imageForAnnotation:self.currentAnnotationView.annotation];
}
委任を使用して、上記のメソッドは私のテーブルビューコントローラークラスで以下を呼び出します。
// downloads Flickr image
- (void )mapViewController:(MapViewController *)sender imageForAnnotation:
(id<MKAnnotation>)annotation
{
FlickrPhotoAnnotation *fpa = (FlickrPhotoAnnotation *)annotation;
dispatch_queue_t downloadQueue = dispatch_queue_create("flickr annotation image
downloader", NULL);
dispatch_async(downloadQueue, ^{
NSURL *url = [FlickrFetcher urlForPhoto:fpa.photo format:FlickrPhotoFormatSquare];
NSData *data = [NSData dataWithContentsOfURL:url];
self.thumbnailImage = [UIImage imageWithData:data];
dispatch_async(dispatch_get_main_queue(), ^ {
MapViewController *mvc = [[MapViewController alloc]init];
[mvc setAnnotationImage];
});
});
}
上記のメソッドは、mapviewコントローラークラスのインスタンスを介して以下のメッセージを呼び出します。
//gets thumbnail image and sets it to the annotation view
- (void)setAnnotationImage
{
UIImage *image = [self.delegate getThumbnailImage];
[(UIImageView *)self.currentAnnotationView.leftCalloutAccessoryView setImage:image];
}
最後に、上記のメソッドは委任を使用して、テーブルビューコントローラークラスで以下のメソッドを呼び出します(呼び出されていません-理由はわかりません)。
//returns the thumbnail image acquired in download
- (UIImage *)getThumbnailImage;
{
return self.thumbnailImage;
}