2010-11-07 36 views
1

我正在使用NSURLConnection從網上下載並保存雷達圖像(格式爲.gif)。在connectionDidFinishLoading:方法中,我使用[UIImage imageWithData:]創建圖像。正在下載並保存可爲空的圖像

- (void)connectionDidFinishLoading:(NSURLConnection *)connection 
{ 
    // Problem is here. mutableData declared earlier. 
    UIImage *baseImage = [UIImage imageWithData:mutableData]; 

    if (baseImage) 
    { 
     // do stuff with image 
    } 

    [mutableData release]; 
} 

問題是,我下載的圖像有時是空白的,背景清晰。這不是圖像中的錯誤(有時雷達上沒有任何東西可以返回)。但是,當這種情況發生時,我在控制檯中發現了這個錯誤。當圖像的像素數很少時(1或2),也會發生錯誤。

Error: ImageIO: malformed GIF frame#0 (600 x 550) 

發生錯誤時,創建的圖像爲零。 600x550是我下載的圖像的像素大小。所以返回的圖像在零,這使得它看起來像下載失敗。

值得注意的是,baseImage可能會在兩種情況下失敗,一種是上面提到的,或者我下載的服務器上列出的圖像實際上還沒有。在第二種情況下,mutableData包含一個錯誤字符串。我仍然需要第二種情況下失敗,所以我知道一個圖像沒有成功下載。

我在這種情況下需要做的是實際創建空白圖像並保存,以便用戶能夠看到下載正確執行。

任何想法?

感謝, 羅斯

+0

要儘量給一些更多的信息,我要附加一個圖像的樣本。我基本上需要一種方法來從這個UIImage。該圖像不是完全空白的(有1個像素),但仍然失敗。 (https://files.me.com/ross.kimes/6cuagt) – 2010-11-11 02:40:54

回答

2

使用此代碼:

NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"https://files.me.com/ross.kimes/6cuagt"]]; 
UIImage *image = [UIImage imageWithData:data]; 
NSLog(@"%@", image); 

恐怕我得在控制檯和一個有效的UIImage對象:(


我想沒有錯誤你可以檢測到一個字符串的存在= - 例如NSSTring stringWithData:encoding: - 如果它是一個有效的字符串,圖像是零,你可以假設它是一個呃ror消息?

+0

事實上,你沒有得到任何錯誤給了我一個想法,問題是什麼。我在iPad和iPhone上都使用iOS 4.2。使用上面的代碼,這對我來說是失敗的。當在模擬器中使用4.1時,它運行良好。我要去借一個朋友的4.1設備來確認。謝謝! – 2010-11-11 16:43:40

+0

在這種情況下,是否值得向蘋果提交一個錯誤報告 - 顯然4.1和4.2之間發生了一些變化,這使得它變得更糟,你對它們有一個很好的測試用例:) – deanWombourne 2010-11-11 18:07:57

+0

是的,我一看到就立即發送了一個問題是什麼。我在4.1設備上進行了測試,可以確認問題所在。希望在幾周之前我會發現它,所以它有機會在4.2上市之前得到修復。好吧。再次感謝你的幫助。 – 2010-11-11 18:23:54

0

也許你可以RY是這樣的:

@try{ 
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"https://files.me.com/ross.kimes/6cuagt"]]; 
UIImage *image = [UIImage imageWithData:data]; 
}@catch (NSException *ex) { 
//Something goes wrong, create the image 
} 
相關問題