[iPhone Xcode]如何在模拟器/设备上获取资源路径?

时间:2010-07-04 21:42:49

标签: iphone

如何在模拟器和设备上获取我的资源路径? 我有这个代码: [码]     NSString * tytul = [NSString stringWithUTF8String:tytul_c];

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];

NSString *myPathDocs =  [documentsDirectory stringByAppendingPathComponent:tytul];

const char *sciezka;
if (![[NSFileManager defaultManager] fileExistsAtPath:tytul])
{
    NSString *stringWithoutTXT = [tytul stringByReplacingOccurrencesOfString:@".txt" withString:@""];


    NSString *myPathInfo = [[NSBundle mainBundle] pathForResource:stringWithoutTXT ofType:@"txt"];
    NSFileManager *fileManager = [NSFileManager defaultManager];

    NSLog(@"%@",myPathDocs);

    //sciezka = [myPathDocs UTF8String];
    sciezka = [myPathInfo UTF8String];
    return sciezka;
}

[/代码]

它在设备上工作正常但不在模拟器上。我该如何解决? 我应该把资源放在哪里?现在,我把它们放在Documents,在项目文件夹中。可以吗?

1 个答案:

答案 0 :(得分:3)

你在某种程度上混合了资源和文档/临时文件。

资源是一个文件,您可以将其添加到XCode项目中,并在目标“复制包资源”构建阶段中列出。资源中没有子文件夹,但您可以添加一个包作为资源,而后者又包含其他资源。你得到路径的NSString,如:

[[UIBundle mainBundle] pathForResource:@"filename" ofType:@"extension"];
[UIBundle bundleWithPath:[[UIBundle mainBundle] pathForResource:@"subbundle" ofType:@"bundle"] pathForResource:@"filename" ofType:@"extension"];

文档,临时文件和缓存是应用程序在运行时编写的文件。这些通常存储在您通过NSSearchPathForDirectoriesInDomains访问的其中一个目录中。

您的代码应该为您提供前三行之后的路径:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *myPathDocs =  [documentsDirectory stringByAppendingPathComponent:tytul];

如果要检查是否存在此文件,则应使用myPathDocs而不是tytul,其中只包含文件名或相对路径。

if (![[NSFileManager defaultManager] fileExistsAtPath:myPathDocs])
{
    return [myPathDocs UTF8String];
}
return NULL;