2011-10-28 20 views
16

Tengo una aplicación con varias imágenes. Quiero verificar si existe una imagen en el paquete. Si lo hago, lo mostraré, si no, mostraré una imagen de reemplazo.Comprobando si existe una imagen en el paquete - iPhone

El siguiente código es lo que se me ocurrió, sin embargo, no funciona. ¿Alguien puede detectar lo que está mal?

¡Gracias!

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"]]; 

} 

EDITAR - Cambió después de la publicación de Simon a continuación, sin embargo, sigue sin funcionar correctamente. Otra declaración siempre se dispara.

Respuesta

22

Usted están buscando en el directorio de documentos de su aplicación. ¿Es esto realmente donde esperas encontrar las imágenes? Si en realidad son recursos añadidos a su paquete, entonces usted necesita para hacer esto:

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

fácil aún - sólo tratar de cargar la imagen con el nombre. Si falla después cargue el predeterminado:

UIImage *tempImage = [UIImage imageNamed:photo]; 

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

[image setImage:tempImage]; 
+0

Respuesta editada para confirmar si realmente desea buscar en el directorio de Documentos o si realmente desea el paquete de su Aplicación. –

+0

Gracias - esto funciona. – GuybrushThreepwood

6

Usted tiene la instrucción if por el camino equivocado, que está diciendo si no existe, a continuación, utilizar, de lo contrario utilizar el defecto ..... quieres ...

if([fileManager fileExistsAtPath:path]) 
+0

Hola Simon. Gracias, pero todavía no funciona. La instrucción else se activa cada vez, incluso si el archivo existe. – GuybrushThreepwood

+0

Definitivamente debería funcionar. El problema es que no puedes pasar el nombre del archivo como ruta. Necesita algo como esto: [[NSBundle mainBundle] pathForResource: @ "filename" ofType: @ "png"] –

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

es mi respuesta.


devuelve SÍ si el archivo existe en el paquete. No tiene que hacer nada con la ruta. solo di [fileExistsInProject: @ "blabla.ext"]

Cuestiones relacionadas