iPad:ImageIO:<error> JPEG不是JPEG文件:以0xff 0xd9 </error>开头

时间:2011-11-17 19:53:35

标签: ipad uiimage ios5 nsurlconnection nsdata

我在问题标题中引用的错误消息让我在iPad上疯狂。

我正在从HTTP-Servers下载一些Jpeg-Files,并且在iphone(iOS 5.0)上使用我的代码可以正常工作。在我的iPad(4.3)上,它会发出此错误消息,无法显示图像。

让我想知道的是我如何修理它,这对我来说并不清楚!

所以我通过NSURLConnection(conn)和NSMutableData(imageData)下载Jpeg:

conn = [[NSURLConnection alloc] 
       initWithRequest:[NSURLRequest requestWithURL:[camera getJpgUrl] 
                                        cachePolicy:NSURLRequestReloadIgnoringLocalCacheData 
                                    timeoutInterval:10] 
                       delegate:self 
                       startImmediately:YES];

if(conn && !imageData)
{
    imageData = [[NSMutableData data] retain];
}

委托方法是:

1)获取更多数据

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    [imageData appendData:data];
}

2)拥有所有数据:

-(void)connectionDidFinishLoading:(NSURLConnection *)aConnection
{
    UIImage *img = [UIImage imageWithData:imageData];

    [imageData setLength:0];
    [conn release];
    conn = nil;

    if(img)
    {
        imageView.image=img;
    }
}

Hooray sais the iphone,欢迎大喊大叫的形象。

然而,在iPad上,当我重新启动初始化NSUrlConnection的方法时,我必须释放imageData-Object而不是将其长度设置为0。我重新启动它以进行图像更新等。

所以iPad中的代码(只是总结一下):

-(void)connectionDidFinishLoading:(NSURLConnection *)aConnection
{
    UIImage *img = [UIImage imageWithData:imageData];

    [imageData release];
    imagedata = [[NSMutableData data] retain];
    conn release];
    conn = nil;

    if(img)
    {
        imageView.image=img;
    }
}

所以现在,我的代码中的imageData处理是测试的结果,所以我可以将其更改为移动优雅处理。那不是那么重要。

但令我惊讶的是,为什么setLength:0会在ios5 / iphone4上做它应该做的,但不能在ipad上做到?我希望我搞砸了一些东西,但在这里我真的不明白发生了什么。

有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

好吧,服务器有些错误:/