2010-06-10 5 views
5

J'ai un tableau de NSString s:Comment savoir si une image existe dans un ensemble?

Flower 
Car 
Tree 
Cat 
Shoe 

Certaines de ces chaînes ont des images qui y sont associées; certains ne le font pas. Je peux créer un nom d'image en ajoutant .png au nom (par exemple Flower.png).

Comment puis-je vérifier si cette image existe réellement dans l'ensemble avant de tenter de la charger dans la vue?

Répondre

19

Cela devrait également fonctionner, et est un peu plus court:

if (flowerImage = [UIImage imageNamed:@"Flower.png"]) 
{ 
    ... // do something here 
} 
else 
{ 
    ... // image does not exist 
} 

La méthode imageNamed: regardera dans votre principale bundle pour le fichier png.

+0

Il est bon d'utiliser convention isEqual : lors de la vérification si deux objets sont égaux. Vous pouvez aussi utiliser == mais je ne le recommanderais pas car dans certaines situations il ne retournera pas les résultats attendus (parfois lors de la comparaison d'objets et de leurs paramètres). Le code actuel est également incorrect car vous assignez une image fleur au lieu de vérifier si elle est égale à l'image png. Copier ce code va générer une erreur en ajoutant isEqual: ou ==. –

+0

Cela fonctionne mais un message d'alerte iOS apparaît indiquant qu'une image n'a pas pu être trouvée. – Herno

5

il suffit de charger la ressource et vérifier si elle est nil ou non:

NSString* myImagePath = [[NSBundle mainBundle] pathForResource:@"MyImage" ofType:@"jpg"]; 
if (myImagePath != nil) { 
    // Do something with image... 
} 
3

J'attribuerait l'image comme une variable, vous pouvez vérifier si l'image existe:

UIImage * flowerImage = [UIImage imageNamed:@"Flower.png"]; 

if (flowerImage) { 
    // Do something 
} 
else { 
    // Do something else 
} 

Dans la réponse acceptée, nous vérifions pour voir si l'image correspond à une image avec un nom spécifique. Cela pourrait se tromper que nous retournerons pas si

  • L'image Flower.png n'existe pas

ET

  • L'image Flower.png existe, mais flowerImage est réglé sur une image différente signifiant qu'ils ne sont pas égaux

Affecter une variable à l'image, puis vérifier si la variable est affectée ou non retour nous un précis oui ou non selon que Flower.png existe

+1

Le point 2 n'est pas vrai. L'opérateur d'affectation dans une instruction if a exactement le même effet qu'une affectation avant l'instruction if. Le code est équivalent au code de réponse accepté. – Ephemera

+0

Ok. Mais ma réponse court sous l'hypothèse que la réponse acceptée sera une erreur. Si == est substitué à la place de = alors si Flower.png n'existe pas ou si elle est différente de flowerImage, alors l'image n'existe pas. Peut-être que la réponse acceptée devrait avoir: ((flowerImage = [UIImage imageNamed: @ "Flower.png"])) comme cela l'assigne aussi (http://stackoverflow.com/questions/3323257/double-parentheses-in-sample- code). Dans ce cas, vous avez raison que le point deux ne sera pas un facteur. Sans éditer cependant, ce sera une erreur. –

+0

L'utilisation de '=' dans une condition if ne lance qu'un avertissement, et je ne pense pas que cela le fasse plus (du moins pas dans Xcode, vous pouvez cependant définir un drapeau de compilateur). En tout cas, c'est l'un des 10% restants dont il est question dans la réponse acceptée à cette question. Le résultat d'une expression d'affectation est le côté gauche de l'expression (le lvalue - 'flowerImage' dans ce cas). Si cela est nul (c'est-à-dire -imageNamed: renvoyé nul) alors la condition if sera fausse. Sinon, ce sera vrai. – Ephemera

0

Je n'ajoute même pas le « .png » au nom du fichier et il fonctionne:

NSArray *images = @[@"Flower", @"Car", @"Tree", @"Cat", @"Shoe"]; 

if ([UIImage imageNamed:images[0]]){ 
     // there is a flower image 
    } else { 
     // no flowers for you 
    } 
} 
Questions connexes