0

从我见过的所有例子来看,我相信我做对了。这是我的代码:

NSString* documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, 
NSUserDomainMask, YES) objectAtIndex:0];
NSString* thisImage = [documentsPath stringByAppendingPathComponent:image_path];
BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:thisImage];

if (fileExists){
    hotel_image = [UIImage imageNamed:image_path];
}else{
    hotel_image = [UIImage imageNamed:@"hdrHotels.jpg"];
}

您可以假设“image_path”等于“images/hotels/thishotel.jpg”。

现在首先,让大家明白,“hdrHotels.jpg”在基本目录中。而“images/hotels/thishotel.jpg”是实际的子目录(蓝色文件夹)。我也尝试过使用:

NSString* documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *imagePath = [NSString stringWithFormat:@"/%@",image_path];
NSString* thisImage = [documentsPath stringByAppendingPathComponent:imagePath];
BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:thisImage];

在“images/hotels/thishotel.jpg”前面添加一个前导“/”。在这两种情况下发生的情况是,无论图像是否存在,“if”语句都是错误的。我不确定我做错了什么。任何帮助将不胜感激。

编辑:

我变了:

NSString *imagePath = [NSString stringWithFormat:@"/%@",image_path];

到:

NSString *imagePath = [image_path stringByReplacingOccurrencesOfString:@"images/hotels/" withString:@""];

但这仍然没有奏效。

我也试过:

NSFileManager* fileManager = [NSFileManager defaultManager];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES);
NSString* documentsDir = [paths objectAtIndex:0];
NSString* myFilePath = [NSString stringWithFormat:@"%@/%@", documentsDir, image_path];
BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:myFilePath];

没有运气。

- - - - - - - - - - - - - - - - - 回答 - - - - - - - - -----------------

所以,是的,我终于想通了。我无法回答我自己的问题,因为我还没有 100 个代表,但这是解决方法。

NSFileManager* fileManager = [NSFileManager defaultManager];
NSString *myFilePath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:image_path];

BOOL fileExists = [fileManager fileExistsAtPath:myFilePath];

if (fileExists){
    hotel_image = [UIImage imageNamed:image_path];
}else{
    hotel_image = [UIImage imageNamed:@"hdrHotels.jpg"];
}
4

4 回答 4

0

如果您的意思是“实际子目录(蓝色文件夹)”和“基本目录”作为 Xcode 中的目录,那么所有文件都将放在包路径中,而不是放在文档目录中。相反,documents 目录中的文件是应用程序在执行期间直接生成、复制或下载的文件。

于 2011-09-22T13:19:42.420 回答
0

将前导 / 添加到 image_path,然后将其添加到 documentPath 会导致“docDir//imagePath”,文件系统将其视为“docDir/imagePath”。正如 viggio24 建议的那样,首先在 resourceDir 中搜索您的图像,然后在 docDir 中搜索。

于 2011-09-22T13:31:53.107 回答
0

这里有四种不同的方式(临时/自定义路径、捆绑文件夹、文档文件夹和访问文档文件夹的另一种形式)

// Temporary Path Folder (read/write files)
//
NSMutableString *tempPathFile = [[NSMutableString alloc] initWithCapacity:(NSUInteger)1024];
[tempPathFile setString:[NSTemporaryDirectory() stringByAppendingPathComponent:@"export.mov"]];


// Application Folder (read-only files)
//
NSString *systemDirectoryPath = [[NSString alloc] initWithString:[[NSBundle mainBundle] resourcePath]];


// Documents Folder (read/write files)
//
NSArray *filePaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsPath = [[NSString alloc] initWithString:[filePaths objectAtIndex:0]];


// Another way to access Documents Folder (read/write files)
//
NSMutableString *documentsPath = [[NSMutableString alloc] initWithCapacity:(NSUInteger)1024];
[documentsPath setString:[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]];

不确定其余代码中发生了什么,但一些类调用的自动释放可以让你得到,所以我通常为我自己的文件夹路径副本分配一个可变字符串

于 2011-09-22T13:33:22.373 回答
0

现在我再次看到这个,我终于可以回答了:

NSFileManager* fileManager = [NSFileManager defaultManager];
NSString *myFilePath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:image_path];

BOOL fileExists = [fileManager fileExistsAtPath:myFilePath];

if (fileExists){
    hotel_image = [UIImage imageNamed:image_path];
}else{
    hotel_image = [UIImage imageNamed:@"hdrHotels.jpg"];
}
于 2013-12-09T13:59:58.230 回答