Проверьте, существует ли файл в ресурсах / навигаторе проекта - PullRequest
0 голосов
/ 28 сентября 2011

Мне нужно проверить, существует ли изображение в навигаторе проекта. Если это не так, то нужно скачать его из интернета. Цель состоит в том, чтобы иметь возможность использовать такие изображения, как [UIImage imageNamed: @ "23451.jpg"];

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

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];

//Set image
NSString *imagePath = [documentsDirectory stringByAppendingPathComponent:@"12345.jpg"];

//Check if the image exists at a given path
BOOL imageExists = [[NSFileManager defaultManager] fileExistsAtPath:imagePath];

//If the image doesn't exists download it.
if (!imageExists)
{
    NSData* data = UIImageJPEGRepresentation([UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"www.mywebsite.com/12345.jpg"]]]);
    [data writeToFile:imagePath atomically:YES];
}

Если все идет правильно, изображение сохраняется по указанному выше пути. Но я все еще не могу использовать это изображение с

[UIImage imageNamed:@"12345.jpg"];  

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

Ответы [ 3 ]

2 голосов
/ 28 сентября 2011

imageNamed будет работать только с изображением формы в комплекте приложений, а не с теми, которые хранятся в каталоге документов. И вы не можете добавить изображение в комплект приложения, оно доступно только для чтения.

if (!imageExists)
{
    NSData* data = UIImageJPEGRepresentation([UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"www.mywebsite.com/12345.jpg"]]]);
    [data writeToFile:imagePath atomically:YES];
}

Нет необходимости делать это, теперь вы JPG JPG:

if (!imageExists)
{
    NSData* data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://www.mywebsite.com/12345.jpg"]];
    [data writeToFile:imagePath atomically:YES];
}
1 голос
/ 28 сентября 2011

NSData * data = [NSData dataWithData: UIImageJPEGRepresentation ([UIImage imageWithContentsOfFile: imagePath], 0.8)];[data writeToFile: imagePath атомарно: ДА];

0 голосов
/ 28 сентября 2011

Я сделал нечто подобное .. вот некоторые выдержки из кода .. не полный код ...

- (void)loadAndStoreImage{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];


NSURL *theurlPortrait = [[NSURL alloc] initWithString:[[DataController sharedDataController].imageResponse objectForKey:@"portraitImageUrl"] ];

NSLog(@"Image url %@ ",theurlPortrait);
imageDataPortrait = [NSData dataWithContentsOfURL:theurlPortrait];
[theurlPortrait release];
imagePortrait= [[UIImage alloc]initWithData:imageDataPortrait];
oldPathPortrait = [documentsDirectory stringByAppendingPathComponent:@"pt_wallpaper_1.png"];


NSURL *theurlLandscape = [[NSURL alloc] initWithString:[[DataController sharedDataController].imageResponse objectForKey:@"landscapeImageUrl"]];
imageDataLandscape = [NSData dataWithContentsOfURL:theurlLandscape];
[theurlLandscape release];
imageLandscape= [[UIImage alloc]initWithData:imageDataLandscape];
oldPathLandscape = [documentsDirectory stringByAppendingPathComponent:@"ls_wallpaper_1.png"];

[self replaceImages];


} 

-(void)replaceImages{
//check if images were fully downloaded or corrupted.
if (isUserSignedIn) {


    if (imageDataPortrait && imageDataLandscape) {
        [UIImagePNGRepresentation(imagePortrait) writeToFile:oldPathPortrait atomically:YES];   
        [UIImagePNGRepresentation(imageLandscape) writeToFile:oldPathLandscape atomically:YES];   
        NSLog(@"IMAGES REPLACED");
        NSDate *currentDate=[NSDate date];
        [[ NSUserDefaults  standardUserDefaults] setObject:currentDate  forKey:@"previousDate"];

    }

}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...