iphone objective-c xcode sdk nsfilemanager

Comprobando si la imagen existe en el paquete-iPhone



objective-c xcode (3)

Tengo una aplicación con una serie de imágenes. Quiero comprobar si existe una imagen en el paquete. Si lo hace, lo muestro, si no, muestro una imagen de reemplazo.

El código de abajo es lo que he encontrado, 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 - Cambiado siguiendo la publicación de Simon a continuación, sin embargo todavía no funciona correctamente. La otra instrucción siempre se dispara.


Tiene la instrucción if de la manera incorrecta, está diciendo que si NO existe, entonces úsela, de lo contrario use la predeterminada ... que desee ...

if([fileManager fileExistsAtPath:path])


Usted está buscando en el directorio de documentos de su aplicación. ¿Es esto realmente donde esperas encontrar las imágenes? Si en realidad son recursos agregados a tu paquete, debes hacer esto:

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

Más fácil aún - solo intenta cargar la imagen nombrada. Si falla, entonces carga el predeterminado:

UIImage *tempImage = [UIImage imageNamed:photo]; if (!tempImage) { tempImage = [UIImage imageNamed:@"iPhoneHD.jpg"] } [image setImage:tempImage];


+(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 diga [fileExistsInProject: @ "blabla.ext"]