2010-06-10 4 views
5

Ho un array di NSString s:Come scoprire se un'immagine esiste all'interno di un pacchetto?

Flower 
Car 
Tree 
Cat 
Shoe 

Alcune di queste stringhe avere immagini ad essi associati; alcuni no. Posso creare un nome immagine aggiungendo .png al nome (ad esempio Flower.png).

Come faccio a verificare se quell'immagine esiste effettivamente nel pacchetto prima che provi a caricarlo nella vista?

risposta

19

Questo dovrebbe anche funzionare, ed è un po 'più corta:

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

Il metodo imageNamed: apparirà nella vostra principale pacchetto per il file png.

+0

E 'buona convenzione di usare IsEqual : quando si controlla se due oggetti sono uguali. Si potrebbe anche usare == ma non lo consiglierei in quanto in certe situazioni non restituirà i risultati attesi (a volte quando si confrontano oggetti e i loro parametri). Anche il codice corrente è errato poiché stai assegnando un'immagine a fiore invece di controllare se è uguale all'immagine png. Copiando questo codice si genera un errore che aggiunge isEqual: o == risolverà. –

+0

Funziona ma viene visualizzato un messaggio di avviso iOS che indica che non è stato possibile trovare un'immagine. – Herno

5

Basta caricare la risorsa e verificare se è nil o no:

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

vorrei assegnare l'immagine come una variabile, allora si può verificare se esiste l'immagine:

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

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

Nella risposta accettata stiamo controllando per vedere se l'immagine è uguale a un'immagine con un nome specifico. Questo potrebbe andare male come avremo modo di tornare non se

  • L'immagine Flower.png non esiste

E

  • L'immagine Flower.png esiste ma flowerImage è impostato su un'immagine diversa che significa che non sono uguali

Assegnare una variabile all'immagine e quindi controllare se la variabile è assegnata o meno ci restituiscono un sì definitivo o no a seconda che Flower.png esiste

+1

Punto punto 2 non è vero. L'operatore di assegnazione in un'istruzione if ha esattamente lo stesso effetto di un compito prima dell'istruzione if. Il codice è equivalente al codice di risposta accettato. – Ephemera

+0

Ok. Ma la mia risposta sta funzionando nel presupposto che la risposta accettata sarà un errore. Se == è sostituito invece di = allora se Flower.png non esiste o se è diverso da flowerImage otterremo l'immagine non esiste. Forse la risposta accettata dovrebbe avere: ((flowerImage = [UIImage imageNamed: @ "Flower.png"])) come questo assegna anche a questo (http://stackoverflow.com/questions/3323257/double-parentheses-in-sample- codice). In questo caso hai ragione che il punto due non sarà un fattore. Tuttavia, senza la modifica, si verificherà un errore. –

+0

L'uso di '=' all'interno di una condizione if emette solo un avvertimento, e non credo che lo faccia ancora (almeno non in Xcode, puoi comunque impostare un flag di compilazione per questo). In ogni caso, questo è uno degli altri 10% di cui parla la risposta accettata a questa domanda. Il risultato di un'espressione di assegnazione è il lato sinistro dell'espressione (il lvalue - 'flowerImage' in questo caso). Se è nullo (ad esempio -imageNamed: restituito nil), la condizione if sarà falsa. Altrimenti sarà vero. – Ephemera

0

Non ho nemmeno aggiungo il ".png" al nome del file e funziona:

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

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