De tous les exemples que j'ai vus, je crois que je fais bien. Voici mon code:iPhone si le fichier existe numéro
NSString* documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask, YES) objectAtIndex:0];
NSString* thisImage = [documentsPath stringByAppendingPathComponent:image_path];
BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:thisImage];
if (fileExists){
hotel_image = [UIImage imageNamed:image_path];
}else{
hotel_image = [UIImage imageNamed:@"hdrHotels.jpg"];
}
Vous pouvez supposer que "image_path" est égal à "images/hotels/thishotel.jpg". Maintenant, d'abord, pour que tout le monde comprenne, "hdrHotels.jpg" se trouve dans le répertoire de base. Et "images/hotels/thishotel.jpg" sont des sous-répertoires réels (folers bleus). J'ai aussi essayé d'utiliser:
NSString* documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *imagePath = [NSString stringWithFormat:@"/%@",image_path];
NSString* thisImage = [documentsPath stringByAppendingPathComponent:imagePath];
BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:thisImage];
Ajout d'un leader "/" devant "images/hôtels/thishotel.jpg". Ce qui se passe dans ces deux cas est que l'instruction "if" est fausse, que l'image existe ou non. Je ne suis pas sûr de ce que je fais de mal du tout. Toute aide serait grandement appréciée.
EDIT:
J'ai changé:
NSString *imagePath = [NSString stringWithFormat:@"/%@",image_path];
à:
NSString *imagePath = [image_path stringByReplacingOccurrencesOfString:@"images/hotels/" withString:@""];
Mais cela ne fonctionnait toujours pas.
J'ai essayé aussi:
NSFileManager* fileManager = [NSFileManager defaultManager];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES);
NSString* documentsDir = [paths objectAtIndex:0];
NSString* myFilePath = [NSString stringWithFormat:@"%@/%@", documentsDir, image_path];
BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:myFilePath];
sans chance.
---------------------------------- RÉPONSE --------- -----------------------
Alors oui, j'ai finalement compris. Je ne peux pas répondre à ma propre question car je n'ai pas encore 100 représentants, mais voici la solution.
NSFileManager* fileManager = [NSFileManager defaultManager];
NSString *myFilePath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:image_path];
BOOL fileExists = [fileManager fileExistsAtPath:myFilePath];
if (fileExists){
hotel_image = [UIImage imageNamed:image_path];
}else{
hotel_image = [UIImage imageNamed:@"hdrHotels.jpg"];
}
Eh bien le "hotel_image = [UIImage imageNamed: image_path];" est utilisé plus tard pour appeler l'image.Donc, il a inclus les "images/hôtels /" ainsi que le nom de l'image. Mais dites-vous que pour vérifier si l'image est là, je devrais la réduire au nom de l'image? – James
si le fichier img est inclus dans votre ensemble de projets, vous n'avez pas besoin d'un chemin sur [UIImage imageNamed:]. Juste le nom du fichier image. Vous pouvez vérifier si l'image est dans votre bundle en vérifiant les projets Target/Build Phase/Copy Bundle Resources. Si le fichier est dans cette liste, vous n'avez pas besoin d'un composant de chemin –
Oui, imageNamed fonctionne sur les noms et non sur les fichiers. Donc, il vérifie initialement dans le cache de l'image. S'il n'est pas trouvé, il cherchera dans l'ensemble de l'application. Si vous souhaitez obtenir une image à partir d'un chemin, vous devez utiliser imageWithContentsOfFile: Envisagez imageNamed: comme méthode pratique pour rechercher facilement les images que vous avez déjà placées dans l'ensemble et que vous souhaitez utiliser comme ressources. En plus de iOS4, vous n'êtes pas obligé de spécifier l'extension de l'image aussi (c'est nécessaire dans iOS <4) – viggio24