2010-11-07 8 views
1

Je télécharge et enregistre une image radar (au format .gif) à partir d'un site Web à l'aide d'une connexion NSURLConnection. Dans la méthode connectionDidFinishLoading:, je crée une image en utilisant [UIImage imageWithData:].Téléchargement et enregistrement d'une image pouvant être vide

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

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

    [mutableData release]; 
} 

Le problème est que les images que je télécharge sont parfois vides et ont un arrière-plan clair. Ce n'est pas une erreur dans l'image (parfois il n'y a rien sur le radar pour revenir). Mais quand cela arrive, je reçois cette erreur dans la console. L'erreur peut également se produire lorsque l'image a un très petit nombre de pixels (1 ou 2).

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

Lorsque l'erreur se produit, l'image créée est nulle. Le 600x550 est la taille en px de l'image que je télécharge. Donc, l'image retournée à zéro, ce qui donne l'impression que le téléchargement a échoué.

Il est à noter que baseImage peut échouer dans 2 cas, celui mentionné ci-dessus ou lorsque je télécharge une image qui est listée sur le serveur qui n'est pas encore là. Dans le second cas, mutableData contient une chaîne d'erreur. J'ai toujours besoin que le 2ème cas échoue donc je sais qu'une image n'a pas été téléchargée avec succès.

Ce que je dois faire dans ce cas est en fait créer l'image vide et l'enregistrer afin que l'utilisateur sera en mesure de voir que le téléchargement effectué correctement.

Des idées?

Merci, Ross

+0

Pour tenter de donner plus d'informations, je vais fixer un échantillon d'une image. J'ai fondamentalement besoin d'un moyen d'en faire un UIImage. Cette image n'est pas complètement vide (a 1 pixel), mais échoue toujours. (https://files.me.com/ross.kimes/6cuagt) –

Répondre

2

En utilisant ce code:

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

Je crains que je reçois pas d'erreur dans la console et un objet UIImage valide :(


Je suppose que vous pouviez détecter la présence d'une chaîne = - ie NSSTring stringWithData: encoding: - si c'est une chaîne valide et que l'image est nulle, vous pourriez probablement supposer que c'est un er Ror message?

+0

Le fait que vous n'obteniez aucune erreur m'a donné une idée de ce que le problème était. Je travaillais avec iOS 4.2 sur mon iPad et mon iPhone. En utilisant le code que vous avez ci-dessus, il a échoué pour moi. En l'essayant en utilisant 4.1 dans le simulateur, cela a bien fonctionné. Je vais emprunter un appareil 4.1 à un ami pour le confirmer. Merci! –

+0

Dans ce cas, vaut-il la peine de soumettre un rapport de bogue à apple - évidemment, quelque chose a changé entre 4.1 et 4.2 qui a empiré et vous avez un joli petit test pour eux :) – deanWombourne

+0

Oui j'en ai envoyé un dès que j'ai vu quel était le problème? J'ai testé sur un appareil 4.1 et peut confirmer que c'était le problème. J'aurais aimé l'avoir remarqué quelques semaines plus tôt, donc il a une chance d'être corrigé avant que le 4.2 ne devienne public. Tant pis. Merci encore pour votre aide. –

0

Peut-être que vous pouvez ry quelque chose comme:

@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 
} 
Questions connexes