2012-01-11 42 views
0

我有一個使用NSURLConnection下載圖像的類。我是新來的ios,所以我想知道如何「通知」我的ViewController下載已完成?我應該使用什麼「工具」?如何通知控制器下載完成?

澄清:

我已經實現了所有的NSURLConnection的回調的,我的問題是如何通知視圖控制器,從我connectionDidFinishLoading是下載完畢?

回答

0

我使用AFNetworking其中您使用塊來處理連接響應成功或失敗。它還有一個很好的包裝器,用於檢索圖像並在UIImageView中加載。

0

要使用NSURLConnection,您必須實現一個委託,該委託具有將在連接發生有趣事情時調用的方法。這就是您如何收到有關連接是否已建立,如何接收數據以及如何知道連接已完成(connectionDidFinishLoading)的信息。在http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/URLLoadingSystem/Tasks/UsingNSURLConnection.html#//apple_ref/doc/uid/20001836-BAJEAIEE

因此,基本上,你把你的connectionDidFinishLoading代碼更多信息具有某種消息發送到視圖控制器,以便更新視圖。

+0

我沒有足夠詳細我已經實現了connectionDidFinishLoading,並嘗試NSnotificayion發送通知給控制器,但從ConnectionDidFinishLoading發送不會收到控制器,可能是由於它運行在不同的線程?我還能用什麼? – user691285 2012-01-11 08:35:34

+0

您是否在使用線程進行下載?使用異步API會更容易。這樣你可以用一個普通的方法調用發送消息,比如'[controller imageDownloaded]'。 – Joni 2012-01-11 08:49:31

0

,你應該只使用在類這些方法是啓動NSURL連接:

#pragma mark - 
#pragma mark Download support (NSURLConnectionDelegate) 

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 
{ 
    [self.activeDownload appendData:data]; 
} 


- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error // Never called (deprecated method not used with IOS version >> 4.3 ???) 
{ 
    // Clear the activeDownload property to allow later attempts 
    self.activeDownload = nil; 

    // Release the connection now that it's finished 
    self.imageConnection = nil; 
} 

- (void)connectionDidFinishLoading:(NSURLConnection *)connection{ 
    UIImage *image = [[UIImage alloc] initWithData:self.activeDownload]; 

    self.activeDownload = nil; 
    // Release the connection now that it's finished 
    self.imageConnection = nil; 
} 

其中imageConnection是類型NSURLConnection的的屬性:

NSURLConnection *imageConnection 

和activeDownload是NSMutableData:

NSMutableData *activeDownload 
相關問題