1

我在一个文件夹中有一堆客户图像(名为 [code].png),但有些客户没有图像,所以我想显示一个占位符。

我正在检查图像 [code].png 是否存在,如果存在,则显示该图像,否则显示占位符。但是,fileExistsAtPath始终返回 false,即使对于存在的图像也是如此。

NSFileManager *m    = [NSFileManager defaultManager];
NSString *imagePath = [NSString stringWithFormat:@"%@.png",code];
if ([m fileExistsAtPath:imagePath])
    self.detailViewController.imageFrame.image = [UIImage imageNamed:[NSString stringWithFormat:@"%@.png",code]];
else
    self.detailViewController.imageFrame.image = [UIImage imageNamed:@"customer_large.png"];

这始终显示 customer_large。

但是,如果我将 imagePath 更改为图像的绝对路径并将显示的图像保留为相对文件名,则布尔值可以正常工作,并且显示的图像也可以正常工作

这证明了我正在检查的文件名确实存在,正如图像显示的那样,但我显然在 fileExistsAtPath 方面遗漏了一些东西,因为当程序证明文件存在时它返回 false。

4

3 回答 3

1

由于图像存储在项目中,而不是文档目录中,我根本不会使用 NSFileManager。

相反,使用 [UIImage imageNamed:@"IMAGE_FILENAME"] 并查看它是否返回 nil。如果是,则使用占位符。

这是一个代码片段:

UIImage *possibleImage = [UIImage imageNamed:@"IMAGE_FILENAME"];
if (possibleImage) {
   self.detailViewController.imageFrame.image = possibleImage;
} else {
   self.detailViewController.imageFrame.image = [UIImage imageNamed:@"customer_large.png"];
}
于 2012-10-26T15:43:42.623 回答
0

我假设您的文件存储在文档目录中?如果是这样,首先通过以下方式获取文档目录的路径:

NSString *destPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    destPath = [destPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.png",nameOfImage]];

这将检查该文件是否存在。希望这会有所帮助:D

于 2012-10-26T15:42:19.443 回答
0

就目前而言,imagePath实际上只是图像的名称。试试这个:

NSString *imagePath = [[NSBundle mainBundle] pathForResource:code ofType:@"png"];
于 2012-10-26T15:43:52.803 回答