2012-10-26 39 views
2

一個奇怪的問題。 我想從網站加載圖片,所以我使用NSURLConnection來做到這一點。 當我在ios4.3上測試我的代碼時,一切正常。 但是當我啓動我的應用程序在ios5.0上,我發現連接:didreceiveData沒有被稱爲無論我做了什麼。 其他函數通常被調用,就像ios4.3中的connectionDidFinishLoading和ios5.0中的connectionDidFinishDownloading一樣。 所以你們,誰可以幫助我,謝謝先進!NSURLConnection連接:didReceiveData:不在ios5上調用

-(void)load 
{ 
    if(isDownloading){ 
     return; 
    } 
    if(conn != nil){ 
     [conn release]; 
    } 
    if(data != nil){ 
     [data release]; 
     data = nil; 
    } 
    [self isDownloading:YES]; 
    ImageDownloadData* imageDownloadData = [imageList objectAtIndex:count]; 
    NSURL* url = [imageDownloadData url]; 
    NSURLRequest* request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0]; 
    conn = [[NSURLConnection alloc] initWithRequest:request delegate:self]; 
    if(conn){ 
     [conn start]; 
    } 
} 

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)rd 
{ 
    NSLog(@"data"); 
    if(!data){ 
     data = [[NSMutableData alloc] initWithData:rd]; 
     return; 
    } 
    [data appendData:rd]; 
} 

回答

4

我不能肯定這是否是您遇到了同樣的問題,但我也有類似的問題,並通過取出的方法和參考NSURLConnectionDownloadDelegate解決它。顯然,NSURLConnection的代表只能實現一次從NSURLConnectionDelegate派生的兩個協議之一。

There's been some odd API changes between 4.3 and 5.0。 Apple將NSURLConnectionDelegate從非正式協議更改爲正式協議,並將一些方法分爲兩個附加的子協議:NSURLConnectionDataDelegateNSURLConnectionDownloadDelegate。 (奇怪的是,他們貶低了NSURLConnectionDelegate中的相同方法,但沒有記錄他們移動到的位置。)

我一直在注意到在編譯我的代碼時使用的6.0 API,我一直無法使Cocoa Touch如果我實施NSURLConnectionDataDelegateNSURLConnectionDownloadDelegate的方法,請致電connection: didReceiveData:。我實施的所有其他方法都按預期調用。

相關問題