2010-04-24 99 views
1

我与路径,相对路径,一个NSBundle和麻烦了所有的路径/文件相关操作:)永久文件更改

虽然我跑寄托都顺利,但所有的文件变化不是模拟器永久的,所以每次我运行我的应用程序,我不得不重复我的应用程序的初始设置。

问题: 什么是读写文件(从资源目录),并让所有的文件永久改变(更新到项目文件夹)的正确方法?

谢谢

编辑:我写了一个简单的方法来做到这一点,它是正确的?

-(NSString *) getPath:(NSString *)forResource 
{ 
    NSString *pathRes, *docPath, *destPath; 
    NSArray *foundPaths; 
    NSFileManager *fs = [[NSFileManager alloc] init]; 

    foundPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES); 
    docPath = [foundPaths objectAtIndex:0]; 
    destPath = [[NSString stringWithFormat:@"%@/%@",docPath,forResource] stringByStandardizingPath]; 


    if(![fs fileExistsAtPath:destPath]) 
    { 
     pathRes = [[NSBundle mainBundle] pathForResource:forResource ofType:nil]; 
     [fs copyItemAtPath:pathRes toPath:destPath error:nil]; 
    } 

    return destPath; 
} 
+0

AFAIK为了使更改保持不变,您必须使用首页按钮关闭应用程序并从模拟器本身重新启动它。从Xcode运行重置它。 – Rengers 2010-04-25 16:52:13

回答

2

您无法写入设备上的应用程序文件夹。将任何持久数据写入文档目录。您可以将资源目录中的文件复制到第一次运行时的文档目录以保留您的现有逻辑。

NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask , YES); 
+0

haaaa,所以“捆绑”它是.app文件和它在里面的“资源”目录,但它是只读的......它是正确的? – Cesar 2010-04-24 06:49:37

+0

是的。对于应用程序来说,修改自身是一种糟糕的形式,iPhoneOS会强制执行此操作。 – drawnonward 2010-04-24 15:46:30

+0

感谢您的回答,现在更清楚它的工作原理。它纠正了我发布到问题中的小方法? – Cesar 2010-04-25 00:46:22