2010-06-10 17 views
5

tengo una serie de NSString s:¿Cómo saber si existe una imagen dentro de un paquete?

Flower 
Car 
Tree 
Cat 
Shoe 

Algunas de estas cadenas tienen imágenes asociadas con ellos; algunos no. Puedo construir un nombre de imagen al agregar .png al nombre (por ejemplo, Flower.png).

¿Cómo puedo verificar si esa imagen existe realmente dentro del paquete antes de intentar cargarla en la vista?

Respuesta

19

Esto también debería funcionar, y es un poco más corto:

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

El método imageNamed: se verá en su principal paquete para el archivo png.

+0

Es buena convención de usar IsEqual : al verificar si dos objetos son iguales. También podría usar ==, pero no recomendaría, ya que en ciertas situaciones no devolverá los resultados esperados (a veces al comparar objetos y sus parámetros). El código actual también es incorrecto ya que está asignando una imagen de flor en lugar de comprobar si es igual a la imagen png. Copiar este código arrojará un error al agregar isEqual: o == lo arreglará. –

+0

Esto funciona, pero aparece un mensaje de alerta de iOS que dice que no se pudo encontrar una imagen. – Herno

5

sólo tiene que cargar el recurso y comprobar si es nil o no:

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

que sería asignar la imagen como una variable, entonces se puede comprobar si existe la imagen:

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

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

En la respuesta aceptada estamos comprobando para ver si la imagen es igual a una imagen con un nombre específico. Esto podría ir mal, ya que no devolverá si

  • La imagen Flower.png no existe

Y

  • La imagen existe Flower.png pero flowerImage se establece en una imagen diferente que significa que no son iguales

Asignar una variable a la imagen y luego verificar si la variable está asignada o no nos devuelven una definitiva o no, dependiendo de si existe Flower.png

+1

El punto 2 no es verdadero. El operador de asignación en una instrucción if tiene exactamente el mismo efecto que una asignación antes de la instrucción if. El código es equivalente al código de respuesta aceptado. – Ephemera

+0

Ok. Pero mi respuesta se basa en la suposición de que la respuesta aceptada será errónea. Si == es sustituido en lugar de = entonces si Flower.png no existe o si es diferente de flowerImage, entonces obtendremos que la imagen no existe. Tal vez la respuesta aceptada debería tener: ((flowerImage = [UIImage imageNamed: @ "Flower.png"])) como esto también lo asigna (http://stackoverflow.com/questions/3323257/double-parentheses-in-sample- código). En este caso, tienes razón en que el punto dos no será un factor. Sin embargo, sin editar, será un error. –

+0

Usar '=' dentro de una condición if solo arroja una advertencia, y no creo que eso vuelva a suceder (al menos no en Xcode, aunque podría establecer un indicador de compilación). En cualquier caso, este es uno de ese otro 10% al que se refiere la respuesta aceptada a esa pregunta. El resultado de una expresión de asignación es el lado izquierdo de la expresión (lvalue - 'flowerImage' en este caso). Si es nulo (es decir, -imagenamed: devuelto nil), entonces la condición if será falsa. De lo contrario, será cierto. – Ephemera

0

Ni siquiera añadir la ".png" al nombre del archivo y funciona:

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

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