NSFileManager fileExistsAtPath仅适用于绝对路径

时间:2012-10-26 15:35:26

标签: objective-c ios nsfilemanager

我在一个文件夹中有一堆客户图片(名为[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更改为图像的绝对路径并将显示的图像保留为相对文件名,则布尔值正常工作,并且显示的图像也可以正常工作< / em>的

这证明我检查的文件名确实存在,如图像所示,但我显然缺少fileExistsAtPath方面的内容,因为当程序证明该文件存在时它返回false。

3 个答案:

答案 0 :(得分: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"];
}

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

现在imagePath只是图像的名称。试一试:

NSString *imagePath = [[NSBundle mainBundle] pathForResource:code ofType:@"png"];