我有一個使用NSURLConnection下載圖像的類。我是新來的ios,所以我想知道如何「通知」我的ViewController下載已完成?我應該使用什麼「工具」?如何通知控制器下載完成?
澄清:
我已經實現了所有的NSURLConnection的回調的,我的問題是如何通知視圖控制器,從我connectionDidFinishLoading是下載完畢?
我有一個使用NSURLConnection下載圖像的類。我是新來的ios,所以我想知道如何「通知」我的ViewController下載已完成?我應該使用什麼「工具」?如何通知控制器下載完成?
澄清:
我已經實現了所有的NSURLConnection的回調的,我的問題是如何通知視圖控制器,從我connectionDidFinishLoading是下載完畢?
我使用AFNetworking
其中您使用塊來處理連接響應成功或失敗。它還有一個很好的包裝器,用於檢索圖像並在UIImageView中加載。
要使用NSURLConnection,您必須實現一個委託,該委託具有將在連接發生有趣事情時調用的方法。這就是您如何收到有關連接是否已建立,如何接收數據以及如何知道連接已完成(connectionDidFinishLoading)的信息。在http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/URLLoadingSystem/Tasks/UsingNSURLConnection.html#//apple_ref/doc/uid/20001836-BAJEAIEE
因此,基本上,你把你的connectionDidFinishLoading代碼更多信息具有某種消息發送到視圖控制器,以便更新視圖。
我沒有足夠詳細我已經實現了connectionDidFinishLoading,並嘗試NSnotificayion發送通知給控制器,但從ConnectionDidFinishLoading發送不會收到控制器,可能是由於它運行在不同的線程?我還能用什麼? – user691285 2012-01-11 08:35:34
您是否在使用線程進行下載?使用異步API會更容易。這樣你可以用一個普通的方法調用發送消息,比如'[controller imageDownloaded]'。 – Joni 2012-01-11 08:49:31
,你應該只使用在類這些方法是啓動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
在那裏找到我的解決方案。謝謝 – user691285 2012-01-11 09:53:35