2013-05-19 2 views
2

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

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

Проблема в том, что он не пишет и не читает с диска. Каждый раз, когда я хочу загружать изображения во второй раз, он все еще читает их с сервера, и NSLog(@"disk"); никогда не будет вызван.

Я не знаю, что я делаю неправильно, если у кого есть идеи?

-(UIImage *)imageWith:(NSString *)imageName isPreview:(BOOL)preview 
{ 
    //imageName is something like "56.jpg" 

    NSString *mainOrPreview = @"Preview"; 
    if (!preview) { 
     mainOrPreview = @"Main"; 
    } 

    NSString *pathSuffix = [[@"Images" stringByAppendingPathComponent:mainOrPreview] stringByAppendingPathComponent:imageName]; 
    NSString *path = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingPathComponent:pathSuffix]; 
    NSData *imageData = [NSData dataWithContentsOfFile:path]; 

    if (imageData) { 
     NSLog(@"disk"); 
    } 

    if (!imageData && [self connected]) { 

      imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:[serverURL stringByAppendingPathComponent: pathSuffix]]]; 

     if (imageData) { 

      [imageData writeToFile:path atomically:YES]; 
     } 

     NSLog(@"server"); 
    } 

     return [UIImage imageWithData:imageData]; 
} 

ответ

3

Проблема в том, что каталоги не существуют за пределами Documents. Поэтому попытки записи файлов не выполняются. Всегда полезно использовать файловые методы, которые имеют параметры NSError, чтобы вы могли проверить результат.

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

if (!imageData && [self connected]) { 
    // This needs to be done in on a background thread! 
    imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:[serverURL stringByAppendingPathComponent: pathSuffix]]]; 

    if (imageData) { 
     [[NSFileManager defaultManager] createDirectoryAtPath:[path stringByDeletingLastPathComponent] withIntermediateDirectories:YES attributes:nil error:nil]; 
     [imageData writeToFile:path atomically:YES]; 
    } 

    NSLog(@"server"); 
} 
+0

OMG! Ты гений! Ты просто спас меня. Огромное спасибо. – Mona

Смежные вопросы