Проверка наличия изображения в комплекте - iPhone - PullRequest
18 голосов
/ 28 октября 2011

У меня есть приложение с несколькими изображениями.Я хочу проверить, существует ли изображение в комплекте.Если это так, я показываю его, если нет, я показываю заменяющее изображение.

Приведенный ниже код - это то, что я придумал, однако это не работает.Может кто-нибудь определить, что не так?

Спасибо!

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

}

РЕДАКТИРОВАТЬ - Изменено после поста Саймона ниже, но все еще не работает правильно.Остальное утверждение всегда срабатывает.

Ответы [ 3 ]

24 голосов
/ 28 октября 2011

Вы ищете в каталоге документов вашего приложения. Это действительно, где вы ожидаете найти изображения? Если они на самом деле являются ресурсами, добавленными в ваш пакет, то вам нужно сделать следующее:

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

Еще проще - просто попробуйте загрузить указанное изображение. Если это не удается, тогда загрузите значение по умолчанию:

UIImage *tempImage = [UIImage imageNamed:photo];

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

[image setImage:tempImage];
17 голосов
/ 29 апреля 2013
+(BOOL) fileExistsInProject:(NSString *)fileName
{
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSString *fileInResourcesFolder = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:fileName];
    return [fileManager fileExistsAtPath:fileInResourcesFolder];
}

мой ответ.Возвращает YES, если файл существует в bundle.Вы ничего не должны делать с путем.просто скажите [fileExistsInProject: @ "blabla.ext"]

6 голосов
/ 28 октября 2011

У вас неверное выражение if, вы говорите, что если его не существует, используйте его, в противном случае используйте выражение по умолчанию ..... вы хотите ...

if([fileManager fileExistsAtPath:path])
...