2012-06-15 45 views
1

我有一個應用程序需要以base64編碼字符串異步下載圖像(服務器以Base64編碼格式返回圖像),我使用的是AsyncImage視圖,但似乎AsyncImageView庫只接受網址異步下載。 任何人有任何想法如何去了解這一點,如果我將一次下載所有圖像的話,我可以傳遞編碼字符串iPhone base64編碼圖像異步下載

[self.imageView loadImageFromURL:[NSURL URLWithString:[EncodedString]]]; 

但這dosesn't有意義,因爲所有的圖像將仍然下載在UIThread中。 請幫忙。 謝謝.. !!

回答

1

應該調查Cocoa Helpers - 它有SimpleHTTPLoader異步加載和ImageViewCached,它正是你所需要的。您不是創建imageView,而是創建ImageViewCached併爲其設置URL。它爲你完成剩下的工作。

但是,如果你想要做你的方式:

我不保證下面的代碼是正確的,但整個思路是(我把它從工作的代碼,並改寫了它對應你的任務。我用可可助手支持Base64解碼。你可以用自己的方法。

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul); 
dispatch_async(queue, ^{  
    NSString *query = [NSString stringWithFormat:@"site.example/image.jpg"]; 
    NSString *data = [[[NSString alloc] initWithContentsOfURL:[NSURL URLWithString:query] encoding:NSUTF8StringEncoding error:nil] autorelease]; 
    theImage = [UIImage imageWithData:(rfc::from_base64(data))] 
    dispatch_sync(dispatch_get_main_queue(), ^{ 
     self.imageview.image = theImage;} 
    }); 
}); 

PS爲64位編碼的圖像,你不得不修改ImageViewCached它加載和解碼圖像。

+0

感謝幫助,我無法理解正確地找到這段代碼。 但是這個隊列是否做了一些使它異步下載。 –

+0

@AbhinandanSahgal在dispatch_async中,您可以編寫重型代碼,在dispatch_sync中編寫結果代碼。它在異步部分完成後執行。在我的代碼中,它用於將大部分數據發送到服務器。這是我的第一個項目,它可能是一個糟糕的代碼(由於高優先級或其他)的例子,但是當我不使用它時 - 應用程序停止,直到數據發送,這部分應用程序完美地工作和數據仍在發送。 – Protheus