如何从Documents文件夹中加载动态保存的图像?

时间:2010-01-22 16:26:32

标签: iphone

我在将iPhone应用程序的Documents文件夹中的图像加载到tableView中时遇到问题。

在单独的请求中,我在服务器上检查所有可用的图像,并将它们下载到Documents下的“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

有没有人遇到同样的问题?

我已经在stackoverflow中查看但没有成功。

提前致谢。

3 个答案:

答案 0 :(得分:5)

我在将应用程序的Documents文件夹中的图像加载到UITableViewCell时遇到了同样的问题。这有效:

[UIImage imageWithContentsOfFile:fullPath];

答案 1 :(得分:0)

已修改:ANSWER

请务必检查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"];
}

答案 2 :(得分:0)

硬编码路径是一个坏主意,因为它可以在重新部署期间发生变化,

尝试这样的事情.. NSString * imagessDirectory = [NSHomeDirectory()stringByAppendingPathComponent:@“Documents / images”];

并使用nsfilemanager验证文件/图像是否存在