2011-10-28 7 views
16

Ho un'app con un numero di immagini. Voglio verificare se esiste un'immagine nel pacchetto. Se lo visualizza, se non visualizzo un'immagine sostitutiva.Verifica se l'immagine esiste in bundle - iPhone

Il codice seguente è quello che ho trovato, tuttavia non funziona. Qualcuno può individuare cosa c'è che non va?

Grazie!

NSString * photo = [NSString stringWithFormat:@"%d.jpg", UniqueID];  

NSFileManager *fileManager = [NSFileManager defaultManager]; 
NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
NSString *path = [documentsDirectory stringByAppendingPathComponent:photo]; 
if([fileManager fileExistsAtPath:path]) 
{ 

    [image setImage:[UIImage imageNamed:photo]]; 
} 

else { 

    NSLog(@"Hello"); 

    [image setImage:[UIImage imageNamed:@"iPhoneHD.png"]]; 

} 

MODIFICA - Modificato in seguito al post di Simon, che tuttavia non funziona correttamente. L'istruzione di Else si attiva sempre.

risposta

22

È stanno guardando nella directory dei documenti dell'app. È davvero qui che ti aspetti di trovare le immagini? Se sono in realtà le risorse aggiunte al vostro pacco, allora avete bisogno di fare questo:

NSString *path = [[NSBundle mainBundle] pathForResource:uniqueID ofType:@"jpg"]; 

Più facile ancora - solo cercare di caricare l'immagine di nome. Se fallisce quindi caricare il default:

UIImage *tempImage = [UIImage imageNamed:photo]; 

if (!tempImage) { 
    tempImage = [UIImage imageNamed:@"iPhoneHD.jpg"] 
} 

[image setImage:tempImage]; 
+0

Risposta modificata per confermare se vuoi veramente cercare nella directory Documenti o se vuoi effettivamente il pacchetto della tua app. –

+0

Grazie - questo funziona. – GuybrushThreepwood

6

avete la if nel modo sbagliato, lei sta dicendo, se non esiste, quindi utilizzarlo, altrimenti utilizzare quella di default ..... vuoi ...

if([fileManager fileExistsAtPath:path]) 
+0

Ciao Simon. Grazie, ma ancora non funziona. L'istruzione else viene attivata ogni volta, anche se il file esiste. – GuybrushThreepwood

+0

Dovrebbe funzionare sicuramente. Il fatto è che non puoi semplicemente passare il nome del file come percorso. Hai bisogno di qualcosa del genere: [[NSBundle mainBundle] pathForResource: @ "nomefile" ofType: @ "png"] –

14
+(BOOL) fileExistsInProject:(NSString *)fileName 
{ 
    NSFileManager *fileManager = [NSFileManager defaultManager]; 
    NSString *fileInResourcesFolder = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:fileName]; 
    return [fileManager fileExistsAtPath:fileInResourcesFolder]; 
} 

è la mia risposta.


restituisce SÌ se il file è presente in bundle. Non devi fare nulla con il percorso. basta dire [fileExistsInProject: @ "blabla.ext"]