NSURLConnection连接:didReceiveData:未在ios5上调用

时间:2012-10-26 10:17:26

标签: ios5 nsurlconnection

一个奇怪的问题。 我想从网上加载图像,所以我使用NSURLConnection来做到这一点。 当我在ios4.3上测试我的代码时,一切都很好。 但是当我在ios5.0上启动我的应用程序时,我发现连接:didreceiveData没有被调用,无论我做什么。 正常调用其他函数,就像ios4.3中的connectionDidFinishLoading和ios5.0中的connectionDidFinishDownloading一样。 所以你们,谁能帮助我,谢谢先进!

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

1 个答案:

答案 0 :(得分:4)

我无法确定这是否与您遇到的问题相同,但我遇到了类似的问题,并通过取出NSURLConnectionDownloadDelegate的in方法和引用来解决它。显然NSURLConnection的代表只能实现从NSURLConnectionDelegate一次派生的两个协议之一。

There's been some odd API changes between 4.3 and 5.0。 Apple将NSURLConnectionDelegate从非正式协议更改为正式协议,并将一些方法扩展为另外两个子协议:NSURLConnectionDataDelegateNSURLConnectionDownloadDelegate。 (奇怪的是,他们贬低了NSURLConnectionDelegate中的相同方法,但没有记录他们搬到的地方。)

如果我实施connection: didReceiveData:NSURLConnectionDataDelegate中的方法,我一直在注意何时编译我的代码以反对6.0 API,我一直无法让Cocoa Touch调用NSURLConnectionDownloadDelegate 。我实现的所有其他方法都按预期调用。