检查图像是否存在于捆绑包中 - iPhone

时间:2011-10-28 15:22:56

标签: iphone objective-c xcode sdk nsfilemanager

我有一个包含大量图片的应用。我想检查捆绑中是否存在图像。如果是的话我会显示它,如果没有,我会显示替换图像。

下面的代码是我提出的,但是它不起作用。谁能发现什么是错的?

谢谢!

NSString * photo = [NSString stringWithFormat:@"%d.jpg", UniqueID];    

NSFileManager *fileManager = [NSFileManager defaultManager];
NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *path = [documentsDirectory stringByAppendingPathComponent:photo];
if([fileManager fileExistsAtPath:path])
{

    [image setImage:[UIImage imageNamed:photo]];  
}

else {

    NSLog(@"Hello");

    [image setImage:[UIImage imageNamed:@"iPhoneHD.png"]];

}

编辑 - 在Simon的帖子下面更改,但仍然无法正常工作。其他陈述总是触发。

3 个答案:

答案 0 :(得分:24)

您正在查看App的文档目录。这真的是你期望找到图像的地方吗?如果它们实际上是添加到您的包中的资源,那么您需要这样做:

NSString *path = [[NSBundle mainBundle] pathForResource:uniqueID ofType:@"jpg"];

更简单 - 只需尝试加载指定的图像。如果失败,则加载默认值:

UIImage *tempImage = [UIImage imageNamed:photo];

if (!tempImage) {
    tempImage = [UIImage imageNamed:@"iPhoneHD.jpg"]
}

[image setImage:tempImage];

答案 1 :(得分:17)

+(BOOL) fileExistsInProject:(NSString *)fileName
{
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSString *fileInResourcesFolder = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:fileName];
    return [fileManager fileExistsAtPath:fileInResourcesFolder];
}

是我的答案。


如果文件存在于bundle中,则返回YES。您不必对路径执行任何操作。 只需说[fileExistsInProject:@“blabla.ext”]

答案 2 :(得分:6)

if语句错误,你说如果它不存在,那就用它,否则使用默认的......你想要...

if([fileManager fileExistsAtPath:path])