Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iPhone UIImage initWithData失败_Iphone_Uikit - Fatal编程技术网

iPhone UIImage initWithData失败

iPhone UIImage initWithData失败,iphone,uikit,Iphone,Uikit,我正在尝试编写一个异步映像下载程序。我使用NSURLConnection将数据获取到NSMutableData中,并在完成后使用该数据初始化UIImage 我检查了字节,它正确地下载了整个图像(至少正确的字节数);当我打电话时 [UIImage imageWithData:data] 然后检查图像的属性,宽度为零,高度为垃圾数,事实上,无论图像是什么,数字都是相同的。我尝试了很多不同的图像,png,jpg,不同的URL,它总是完全下载图像,但是UIImage不能用这些数据初始化。我在这里做错了

我正在尝试编写一个异步映像下载程序。我使用NSURLConnection将数据获取到NSMutableData中,并在完成后使用该数据初始化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消息,您的代码读取该字节(它们不是图像的有效字节,您将得到零)。

您可能需要在下载数据并初始化数据对象的位置发布代码。