9
votes

Obtenir une image d'URL / serveur

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];
}


0 commentaires

5 Réponses :


1
votes

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] ) 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.


0 commentaires

1
votes

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.

Lorsque vous passez une image non-image Nsdata dans un message ImageWithData, vous obtiendrez nil. Vous devriez probablement vérifier cela.


0 commentaires

2
votes

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 /


0 commentaires

28
votes

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> xxx pré>

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];


2 commentaires

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é



1
votes

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];
}


0 commentaires