2

一个奇怪的问题。我想从网上加载一张图片,所以我使用 NSURLConnection 来做。当我在 ios4.3 上测试我的代码时,一切正常。但是当我在 ios5.0 上启动我的应用程序时,我发现连接:didreceiveData 不管我做什么都没有被调用。otherelse函数调用正常,就像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];
}
4

1 回答 1

4

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

在 4.3 和 5.0 之间有一些奇怪的 API 变化。Apple 将 NSURLConnectionDelegate 从非正式协议更改为正式协议,并将其中一些方法分支为两个额外的子协议: NSURLConnectionDataDelegateNSURLConnectionDownloadDelegate。(奇怪的是,他们贬低了 NSURLConnectionDelegate 中相同的方法,但没有记录他们搬到哪里。)

在针对 6.0 API 编译我的代码时,我一直注意到,connection: didReceiveData:如果我从NSURLConnectionDataDelegateNSURLConnectionDownloadDelegate. 我实现的所有其他方法都按预期调用。

于 2012-12-14T21:25:59.387 回答