如何在Objective-C中写入文件?

时间:2013-03-20 00:08:30

标签: objective-c file-management

我的文本文件包含我的应用所需的一些基本数据。我可以读取文件并获得文件路径:

 NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Money" ofType:@"txt"];

要写入我认为我会使用的文件:

[[HoldString dataUsingEncoding:NSUTF8StringEncoding] writeToFile:fileAtPath atomically:NO];

这不起作用,我也尝试使用以下方法设置文件路径:

NSString* filePath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString* fileAtPath = [filePath stringByAppendingPathComponent:@"Money.txt"];

这些都不起作用。我希望能够从不使用CoreData的文件中读取。

3 个答案:

答案 0 :(得分:1)

应用程序的资源包是只读的(至少在真实设备上)。您需要将数据写入另一个位置,例如Documents目录。

大多数应用都会检查文件目录中是否存在该文件。如果没有,它将从资源包中复制文件。然后对副本进行所有读写操作。

答案 1 :(得分:1)

您无法写入应用包内的路径;你的包是只读的。这就是为什么第一种方法不起作用的原因。

但是你的第二种方法实际上应该在文档目录中形成一个有效的路径。你确定有什么东西要读吗?安装应用程序时,该目录将为空。如果要修改自己包含的文本文件,请先将其从包路径复制到文档文件夹。

答案 2 :(得分:0)

在iOS上,应用程序包是只读的,因此您无法在其上书写。解决此问题的方法是使用documents文件夹存储您需要的文件并在其中写入数据。

在您的情况下,替代方案是使用NSUserDefaults。因此,第一次运行应用程序时,您可以从包上的该文件(Money.text)读取(或者如果可以的话,避免将其保存在包上)。阅读之后,不是写入它,而是将整个文本保存到NSUserDefaults,如下所示:

[[NSUserDefaults standardUserDefaults] setObject: holdString forKey: @"money" ];  // By convention you should name it holdString instead of HoldString.  

阅读数据:

NSString* moneyStr= [[NSUserDefaults standardUserDefaults] objectForKey: @"money"];