ios writeToFile更改不保存

ios声称文件已经被写入,但是这些改变从来没有真正保存过,就好像它们保持在缓冲区中一样。 我必须冲洗什么?

- (void)viewDidLoad { [super viewDidLoad]; NSString *myFilePath = [[NSBundle mainBundle] pathForResource:@"MyFile" ofType:@"txt"]; NSLog(@"\n\nPath = \n%@", myFilePath); NSString *myFileContents = [NSString stringWithContentsOfFile:myFilePath encoding:NSUTF8StringEncoding error:nil]; NSLog(@"\n\nContents = \n%@", myFileContents); [@"This line will be written to file" writeToFile:myFilePath atomically:YES encoding:NSUTF8StringEncoding error:nil]; NSString *changedContents = [NSString stringWithContentsOfFile:myFilePath encoding:NSUTF8StringEncoding error:nil]; NSLog(@"\n\nChanged Contents = \n%@", changedContents); } 

输出:

 Path = /Users/hamzeh/Library/Application Support/iPhone Simulator/5.1/Applications/2B318687-A745-4CD9-85BA-52A01AB76F6E/savepersistentdata_tutorial.app/MyFile.txt Contents = This is a text file. The file will be displayed on the iPhone. That is all for now. Changed Contents = This line will be written to file 

这是我每次运行时得到的输出,所以这些更改实际上不会写入文件。

谢谢您的帮助。

您不能编辑主包中的文件。 您必须首先将文件保存到应用程序文档文件夹,然后进行任何更改。

这里有一些代码可以解决你的问题:

首先将文本保存到您创build的目录中:

 NSString *myFilePath = [[NSBundle mainBundle] pathForResource:@"MyFile" ofType:@"txt"]; NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES); NSString *directory = [NSString stringWithFormat:@"%@/Some_Directory", [paths objectAtIndex:0]]; // Check if the directory already exists if (![[NSFileManager defaultManager] fileExistsAtPath:directory]) { // Directory does not exist so create it [[NSFileManager defaultManager] createDirectoryAtPath:directory withIntermediateDirectories:YES attributes:nil error:nil]; } NSData *data = [[NSData dataWithContentsOfFile:myFilePath] retain]; NSString *filePath = [[directory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@", [myFilePath lastPathComponent]]] retain]; NSError *error = nil; if (![data writeToFile:filePath options:NSDataWritingFileProtectionNone error:&error]) { [data writeToFile:filePath atomically:NO]; } [data release]; [filePath release]; 

使用NO参数

 [@"This line will be written to file" writeToFile:myFilePath atomically:NO encoding:NSUTF8StringEncoding error:nil]; 

iOS文档说

(BOOL)useAuxiliaryFile
如果是,则将接收器写入辅助文件,然后将辅助文件重命名为path。 如果否,则接收器直接写入path。 YES选项保证path(如果存在的话)即使系统在写入期间崩溃也不会被破坏。

你不能在主包上写文件,因为资源包是只读的。 你也可以检查writeToFile方法的返回writeToFile 。 如果将其部署到设备上,则返回false。