0

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

 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 的文件中读取。

4

3 回答 3

1

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

大多数应用程序会检查文件是否存在于 Documents 目录中。如果没有,它会从资源包中复制一个文件。然后所有的读写都对副本进行。

于 2013-03-20T00:11:14.353 回答
1

您不能写入应用程序包内的路径;你的包是只读的。所以这就是为什么第一种方法行不通的原因。

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

于 2013-03-20T00:11:24.510 回答
0

在 iOS 上,应用程序包是只读的,所以你不能在上面写。解决此问题的一种方法是使用文档文件夹来存储您需要的文件并在其中写入数据。

在您的情况下,另一种选择是使用 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"];
于 2013-03-20T00:31:49.633 回答