2012-10-10 17 views
2

我正在使用NSURLConnection下載位圖。我將代表設置爲self,並實施方法connection:didReceiveDataconnectionDidFinishLoading。當收到數據時,我將它存儲在一個NSMutableData對象(稱爲輸入)中,然後在連接結束時,我使用它來創建位圖。問題是我收到connection:didReceiveData中的數據,但在connection:DidFinishLoading中爲空。我該如何解決?NSURLConnection數據請求結束時無數據

- (void)start 
{ 
    NSURL *url = [NSURL URLWithString:src]; 
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; 

    connection = [[NSURLConnection alloc] initWithRequest:request 
               delegate:self 
             startImmediately:YES]; 
} 

- (void)connection:(NSURLConnection *)conn 
    didReceiveData:(NSData *)d 
{ 
    NSLog(@"Data Received: %@", d);//This prints the correct data 
    //Add data chunk to input 
    [input appendData:d]; 
} 

- (void)connectionDidFinishLoading:(NSURLConnection *)conn 
{ 
    CPLog(@"Finished Receiving bitmap from server. Data received with length %d: %@", [input length], input);//this prints length 0 and a value of (null) 
    CFDataRef imgData = (__bridge CFDataRef) input; 
    CGDataProviderRef imgDataProvider = CGDataProviderCreateWithCFData (imgData); 
    CGImageRef image; 
    if (!imgDataProvider) 
    { 
     NSLog(@"Request Failed!");//happens every time 
     [callback handleBitmap:nil]; 
     return; 
    } 

    image = CGImageCreateWithJPEGDataProvider(imgDataProvider, NULL, true, kCGRenderingIntentDefault); 


    [callback handleBitmap:image]; 
    return; 

} 

回答

5

您應該爲input屬性分配內存。通常在開始新的url連接前完成:

- (void)start 
{ 
    self.input = [NSMutableData data]; 
    // .... init and start url connection 
}