Je suis assez nouveau au développement de l'iPhone et j'essaie d'extraire des "images du serveur" dans mon application.
J'utilise la méthode suivante pour le faire: P>
- (NSString *)jsonFromURLString:(NSString *)urlString { NSURL *url = [NSURL URLWithString:urlString]; NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url]; [request setHTTPMethod:@"GET"]; NSURLResponse *response = nil; NSError *error = nil; NSData *result = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; [request release]; [self handleError:error]; NSString *resultString = [[NSString alloc] initWithData:result encoding:NSUTF8StringEncoding]; return [resultString autorelease]; }
5 Réponses :
La cause la plus probable est que vous n'auriez pas réellement récupérer une image, ou vous recherchez une image que l'iPhone ne peut pas décoder. Je commencerais par vérifier le type MIME du résultat ( [Réponse MIMEType] code>) et assurez-vous que c'est ce que vous attendez et non une chaîne par exemple. Ensuite, assurez-vous que votre type est l'un des types UiImage peut gérer: TIFF, JPEG, GIF, PNG, BMP, ICO, CUR, XBM. P>
Cela pourrait très bien être que le retour de votre serveur n'est pas réellement des données d'image, et vous pouvez simplement coller l'URL dans un navigateur et voir si vous obtenez l'image. Il ne semble y avoir rien de mal avec le code, à l'exception du manque de vérification des erreurs. p>
Lorsque vous passez une image non-image Nsdata dans un message ImageWithData, vous obtiendrez nil. Vous devriez probablement vérifier cela. p>
J'ai écrit la classe RemoteImage pour charger des images sur le réseau de manière asynchrone. Il veille également à libérer la mémoire si nécessaire. Voir ce message: http://www.dimzzy.com / blog / 2009/11 / distant-image-for-iphone / p>
Si tout ce que vous essayez de faire est d'attraper une image à partir d'un serveur Web via une URL, il existe un moyen plus facile.
C'est ce que j'utilise: p> et si vous souhaitez l'utiliser sur une vue d'image, procédez comme suit: P> // Let's assume the picture is an instantiated UIImageView
[picture setImage: myImage];
[myImage release];
Tant que vous le mettez dans un fil séparé afin que l'interface utilisateur ne se bloque pas.
Pourquoi relâchez-vous myImage? Vous ne l'avez pas alloué
Ce n'est probablement pas directement pertinent pour votre question, mais je voulais souligner que votre vérification d'erreur ici a un problème potentiel. Des méthodes telles que celles-ci ont un paramètre de référence à un nserror code> ne définissent généralement pas ce qu'ils reviennent sur le succès. En d'autres termes, vous devriez vérifier la valeur de retour des méthodes d'abord et seul em> accéder au pointeur d'erreur si la méthode a échoué:
NSString *resultString = nil;
NSData *result = [NSURLConnection sendSynchronousRequest:request
returningResponse:&response
error:&error];
[request release];
if( result ) {
resultString = [[NSString alloc] initWithData:result
encoding:NSUTF8StringEncoding];
}
else {
[self handleError:error];
}