2009-01-04 5 views
1

Je suis nouveau à ce sujet, alors s'il vous plaît baissez-le pour moi. J'ai bricolé avec Objective-C pour une application pour iPhone et j'ai atteint un barrage routier.Téléchargement d'une image avec une URL de variable?

J'essaie de transmettre la valeur contenue dans une variable (chaîne) à une méthode mais cela ne fonctionne pas. Je devine que c'est parce que la variable est probablement un pointeur vers la valeur, pas la valeur elle-même. Je me demande si vous pouvez suggérer comment je répare.

Voici la méthode

- (UIImage *)newUIImageWithURLString:(NSString *)urlString 
{ 
   return [[UIImage alloc] initWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:urlString]]]; 
} 

Envoi ce message fonctionne ... Ici, j'ai codé en dur l'URL, d'être envoyé.

UIImage* newimage = [self newUIImageWithURLString:@"http://images.mydomain.com/PhotoServer/Thumb/97/83358897.jpg"]; 

Celui-ci ne ... Ici, la variable est passed.I obtenir une erreur que la valeur passée n'a pas de valeur.

UIImage* newimage = [self newUIImageWithURLString:newListing.ListingPhotoUrl]; 

Je sais qu'il a une valeur car ce qui suit fonctionne.

self.ListingtitleLabel.text = newListing.ListingPhotoUrl; 

Des pensées? Etes-vous sûr que l'URL dynamique est valide?

Répondre

2

Par exemple, si newListing.ListingPhotoURL n'est pas une URL valide ou n'est pas accessible, vous obtiendrez cette erreur car vous ne faites aucune vérification d'erreur. Bien que votre code soit concis, vous devriez probablement être un peu plus bavard pendant que vous déboguez, ou du moins jusqu'à ce que vous soyez plus à l'aise avec la langue. Je suggère de réécrire votre méthode en tant que telle:

-(UIImage*)newUIImageWithURLString:(NSString*)urlString { 
    NSParameterAssert(urlString); 
    NSData *pictureData = [NSData dataWithContentsOfURL:[NSURL URLWithString:urlString]]; 
    NSAssert1(pictureData, @"No data returned for url: %@", urlString); 
    return [[UIImage alloc] initWithData:pictureData]; 
} 

Avec la méthode écrite comme celui-ci, vous saurez tout de suite si quelque chose ne se comporte pas comme prévu (les macros d'assertion jetteront exceptions). Cela vous donne également des endroits plus granulaires pour définir des points d'arrêt si vous essayez de déboguer quelque chose.

Questions connexes