一个奇怪的问题。 我想从网上加载图像,所以我使用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];
}
答案 0 :(得分:4)
我无法确定这是否与您遇到的问题相同,但我遇到了类似的问题,并通过取出NSURLConnectionDownloadDelegate
的in方法和引用来解决它。显然NSURLConnection
的代表只能实现从NSURLConnectionDelegate
一次派生的两个协议之一。
There's been some odd API changes between 4.3 and 5.0。 Apple将NSURLConnectionDelegate从非正式协议更改为正式协议,并将一些方法扩展为另外两个子协议:NSURLConnectionDataDelegate和NSURLConnectionDownloadDelegate。 (奇怪的是,他们贬低了NSURLConnectionDelegate中的相同方法,但没有记录他们搬到的地方。)
如果我实施connection: didReceiveData:
和NSURLConnectionDataDelegate
中的方法,我一直在注意何时编译我的代码以反对6.0 API,我一直无法让Cocoa Touch调用NSURLConnectionDownloadDelegate
。我实现的所有其他方法都按预期调用。