我的文本文件包含我的应用所需的一些基本数据。我可以读取文件并获得文件路径:
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的文件中读取。
答案 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"];