在我的项目中,我使用从服务器下载图像的图像视图。它在iOS 4上运行良好,但在iOS 5上没有显示。
使用iOS 5时是否需要注意最低分辨率。来自服务器的图像之一是72 dpi分辨率,适用于iOS 4但不适用于iOS 5.
我已经写了一个类别到图像视图,它将从图像URL下载代码 这是代码片段:
- (void) setImageFromServer:(NSString *) imageURL
{
if (imageURL!=nil)
{
ImageDownloader *imageDownloader = [[[ImageDownloader alloc] init] autorelease];
imageDownloader.requester = self;
[imageDownloader startDownload:imageURL];
}
}
- (void) didDownloadImageData:(NSData *) data forImageURL:(NSString *) imageURL
{
[self setImage:[UIImage imageWithData:data]];
}
在下载程序文件中:
- (void) startDownload:(NSString *)MyimageURL {
self.imageData = [NSMutableData data];
self.currentImageURL = MyimageURL;
self.downloadConnection = [NSURLConnection connectionWithRequest: [NSURLRequest requestWithURL:[NSURL URLWithString:self.currentImageURL]]
delegate: self];
[self.downloadConnection start];
}
- (void) connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
[imageData appendData:data];
}
- (void) connectionDidFinishLoading:(NSURLConnection *)connection {
[self.requester didDownloadImageData:self.imageData forImageURL:self.currentImageURL];
isRewardTagImageAvailable = YES;
[connection release];
connection = nil;
}
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{
}
答案 0 :(得分:0)
我不确定这是否是一个问题,但通常在我编写NSURLRequest时,我首先按如下方式初始化并将请求插入到NSURLConnection中。有点像这样。另请注意,一旦在NSURLConnection中initWithRequst,您就不必告诉该连接启动,它将自动执行。
NSURLRequest *tempReq = [[NSURLRequest alloc] initWithURL:someURL cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:10.0];
NSURLConnection *tempCon = [[NSURLConnection alloc] initWithRequest:tempReq delegate:self];
我的意思是它应该没关系,但是因为看着你的代码看起来很好。
我建议添加didFailWithError方法:
-(void) connection:(NSURLConnection *)connection didFailWithError:(NSError *)error;
对于您的文件也可能因为某些原因导致您的连接失败。
答案 1 :(得分:0)
您的连接是同步还是异步?
如果是异步,则不应自动释放ImageDownloader,因为有可能会为connectionDidFinishLoading消息发布它。
尝试正常分配ImageDownloader,然后在完成下载时释放它(在 connectionDidFinishLoading 和 didFailWithError 中)