iPhone UIImage initWithData失败
我正在尝试编写一个异步映像下载程序。我使用NSURLConnection将数据获取到NSMutableData中,并在完成后使用该数据初始化UIImage 我检查了字节,它正确地下载了整个图像(至少正确的字节数);当我打电话时iPhone UIImage initWithData失败,iphone,uikit,Iphone,Uikit,我正在尝试编写一个异步映像下载程序。我使用NSURLConnection将数据获取到NSMutableData中,并在完成后使用该数据初始化UIImage 我检查了字节,它正确地下载了整个图像(至少正确的字节数);当我打电话时 [UIImage imageWithData:data] 然后检查图像的属性,宽度为零,高度为垃圾数,事实上,无论图像是什么,数字都是相同的。我尝试了很多不同的图像,png,jpg,不同的URL,它总是完全下载图像,但是UIImage不能用这些数据初始化。我在这里做错了
[UIImage imageWithData:data]
然后检查图像的属性,宽度为零,高度为垃圾数,事实上,无论图像是什么,数字都是相同的。我尝试了很多不同的图像,png,jpg,不同的URL,它总是完全下载图像,但是UIImage不能用这些数据初始化。我在这里做错了什么
谢谢
代码实际上就像您期望的那样:
连接代理:
-(void)connectionDidFinishLoading:(NSURLConnection*)theConnection {
[[ImageManager sharedInstance] dataDownloadedBy:self]; }
图像管理器:
-(void)dataDownloadedBy:(WebConnection *)connection{
WebImage *image = [[WebImage alloc] initWithLink:connection.url];
[image setImageFromData:connection.data];
[images addObject:image];
[connection release];}
网络图像:
-(void)setImageFromData:(NSMutableData *)data{
image = [[UIImage alloc] initWithData:data];}
我说不出是怎么回事,可能是你没有正确使用这个版本,比如说我不知道你为什么在数据下载结束时发布连接,应该是图像? 如果您在这里发布更多代码,这可能会有所帮助 我以前也做过同样的事情,你可以看看这里的帖子
希望它有帮助如果initWithData失败,很可能是您获取的图像数据已损坏。您应该将其保存到如下文件:
[data writeToFile:@"/tmp/foo.jpg" atomically:NO];
然后尝试在Preview.app中打开它。首先,我确定UIImage不会用垃圾数据初始化。构造函数
initWithData
分析数据以确定文件格式。如果数据已损坏,则返回的图像将为零。首先检查这个
-(void)dataDownloadedBy:(WebConnection *)connection{
WebImage *image = [[WebImage alloc] initWithLink:connection.url];
[image setImageFromData:connection.data];
if (image.image != nil) { [images addObject:image]; }
[connection release];
}
其次,确保在下载过程中附加数据。以下是回调方法:
- (void) connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
[self.receivedData appendData:data];
}
最后,您的代码必须绝对包含第二种情况:下载失败
- (void) connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
[connection release];
}
您的问题描述缺少一些重要的代码
苹果的URLCache演示是理解异步映像下载的一个非常好的项目。
我希望这对你有帮助 另一个问题是,如果您请求一个无法访问的文件,则会出现同样痛苦的错误:HTTP服务器将返回错误404消息,您的代码读取该字节(它们不是图像的有效字节,您将得到零)。您可能需要在下载数据并初始化数据对象的位置发布代码。