2011-10-28 3 views
16

J'ai une application avec un certain nombre d'images. Je veux vérifier si une image existe dans le bundle. Si c'est le cas je l'affiche, sinon j'affiche une image de remplacement.Vérification de la présence d'une image dans l'ensemble - iPhone

Le code ci-dessous est ce que j'ai trouvé, mais cela ne fonctionne pas. Quelqu'un peut-il repérer ce qui ne va pas?

Merci!

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

} 

EDIT - Modifié après le message de Simon ci-dessous, mais ne fonctionne toujours pas correctement. L'instruction Else se déclenche toujours.

Répondre

22
Vous

cherchez dans le répertoire Documents de votre application. Est-ce vraiment là où vous vous attendez à trouver les images? Si elles sont en fait des ressources ajoutées à votre paquet, vous devez faire ceci:

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

encore plus facile - juste essayer de charger l'image nommée. Si elle échoue, charger la valeur par défaut:

UIImage *tempImage = [UIImage imageNamed:photo]; 

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

[image setImage:tempImage]; 
+0

La réponse éditée pour confirmer si vous voulez vraiment regarder dans le répertoire de Documents ou vous voulez réellement l'ensemble de votre App. –

+0

Merci - cela fonctionne. – GuybrushThreepwood

6

Vous avez l'instruction if dans le mauvais sens, vous dites si elle n'existe pas, utilisez-le, sinon utilisez la valeur par défaut d'un ..... vous voulez ...

if([fileManager fileExistsAtPath:path]) 
+0

Salut Simon. Merci mais ça ne marche toujours pas. L'instruction else est déclenchée à chaque fois, même si le fichier existe. – GuybrushThreepwood

+0

Ça devrait vraiment marcher. La chose est que vous ne pouvez pas simplement passer dans le nom du fichier en tant que chemin. Vous avez besoin de quelque chose comme ceci: [[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]; 
} 

est ma réponse.


renvoie YES si le fichier existe dans bundle.vous n'avez rien à faire avec path. dites simplement [fileExistsInProject: @ "blabla.ext"]

Questions connexes