Как загрузить изображения из папки «Документы», которые были сохранены динамически? - PullRequest
2 голосов
/ 22 января 2010

У меня проблема с загрузкой изображений из папки «Документы» приложения iPhone в tableView.

В отдельном запросе я проверяю на сервере все доступные изображения и загружаю их в папку «images» в разделе «Документы». Я уверен, что изображения сохранены правильно.

NSString *filePath = [imagesFolderPath stringByAppendingPathComponent:imageFileName];
    [urlData writeToFile:filePath atomically:NO];
NSLog(@"Saved to file: %@", filePath);

2010-01-22 17:07:27.307 Foo[2102:207] Saved to file: /Users/Hoang/Library/Application Support/iPhone Simulator/User/Applications/6133A161-F9DC-4C92-8AE6-5651022EAA94/Documents/images/86_2.png

[NSBundle mainBundle] не подходит для загрузки изображений, поскольку во время выполнения приложение пытается подключиться к серверу для загрузки изображений, они не являются статичными.

Но загрузка изображений из папки Documents / images не дает мне изображение в TableView.

static NSString *CellIdentifier = @"CellCategory";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}

// Set up the cell...
UIImageView *imageView = cell.imageView;

MenuItem *item = (MenuItem *) [arrayMenuItems objectAtIndex:indexPath.row];
cell.textLabel.text = item.descrizione;


NSString *strImagePath = [[imagesFolderPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%d_%d", item.idItem, item.idNode]] stringByAppendingPathExtension:@"png"];  
NSLog(@"strImagePath: %@", strImagePath);
imageView.image = [[UIImage imageWithContentsOfFile:strImagePath] autorelease];



2010-01-22 17:07:42.842 Foo[2102:207] strImagePath: /Users/Hoang/Library/Application Support/iPhone Simulator/User/Applications/6133A161-F9DC-4C92-8AE6-5651022EAA94/Documents/images/86_2.png

У кого-нибудь есть такая же проблема?

Я посмотрел в стеке потока, но не удалось.

Заранее спасибо.

Ответы [ 3 ]

5 голосов
/ 30 декабря 2011

У меня только что была такая же проблема с загрузкой изображений из папки документов приложения в UITableViewCell. Это работает:

[UIImage imageWithContentsOfFile:fullPath];
0 голосов
/ 23 января 2010

жесткое кодирование пути - плохая идея, так как он может измениться во время повторного развертывания,

попробуйте что-то вроде этого .. NSString * imagessDirectory = [NSHomeDirectory () stringByAppendingPathComponent: @ "Documents / images"];

и убедитесь, что файл / изображение есть даже с помощью nsfilemanager

0 голосов
/ 22 января 2010

Отредактировано: ОТВЕТ

Обязательно проверьте ответ на NSData, чтобы увидеть, есть ли изображения. В моем случае все коды в порядке, но ответ от сервера ничего не дает. Он по-прежнему может сохранять изображение в файл в папке документов / изображений и по-прежнему не вызывает никаких ошибок, пока я не понял, что все изображения не существуют на сервере. ОШИБКА, не связанная с папкой «Документы»

Оригинальный ответ

Должны быть некоторые проблемы с кодом инициализации UIImage.

Я уже пробовал три функции инициализации для изображения, имеющего путь в каталоге Documents.

Но это просто не работает.

Здесь вы можете видеть, что код всегда попадает в (существующий) блок, первая строка - загрузка изображения из каталога Documents / images, он всегда завершается ошибкой.

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

Четвертая строка кода, я получаю исходную ссылку на изображения на сервере, и она получает то, что я почти хочу. (На самом деле, я хочу сохранить все изображения с сервера в каталоге Documents / images перед их использованием, а затем загрузить их оттуда)

NSString *strImagePath = [[imagesFolderPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%d_%d", item.idItem, item.idNode]] stringByAppendingPathExtension:@"png"];  
NSLog(@"strImagePath: %@", strImagePath);

BOOL exists = [[NSFileManager defaultManager] fileExistsAtPath:strImagePath];

if (exists){
    //UIImage *menuImage = [UIImage imageWithContentsOfFile:strImagePath];
    //UIImage *menuImage = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"ALT" ofType:@"png"]];
    //imageView.image = menuImage;
    NSString *strImagePathURL = [NSString stringWithFormat:@"http://foo.com/%d_%d.png", item.idItem, item.idNode];
    NSData *imageData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:strImagePathURL]];
    imageView.image = [[UIImage alloc] initWithData:imageData];
}
else {
    imageView.image = [UIImage imageNamed:@"ALT.png"];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...