2

を使用してビットマップをダウンロードしていNSURLConnectionます。デリゲートを に設定し、メソッドとselfを実装します。データが受信されると、それをオブジェクト ( inputと呼ばれます) に格納し、接続の最後に、これを使用してビットマップを作成します。問題は、 でデータを受け取ることですが、 では null です。これを修正するにはどうすればよいですか?connection:didReceiveDataconnectionDidFinishLoadingNSMutableDataconnection:didReceiveDataconnection:DidFinishLoading

- (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;

}
4

1 に答える 1

5

プロパティにメモリを割り当てる必要がありinputます。通常、新しい URL 接続を開始する前に行われます。

- (void)start
{
    self.input = [NSMutableData data];
    // .... init and start url connection
}
于 2012-10-10T21:42:43.940 に答える