Swift:在iOS应用程序中读取和写入文件

时间:2014-09-26 13:45:11

标签: ios file swift

我的iOS应用程序中有一个名为coins.txt的文件,用于记录玩家拥有的硬币数量。每次启动应用程序时,都会读取文件以确定玩家使用此文件路径的硬币数量: var cFilePath: String! = NSBundle.mainBundle().pathForResource("coins", ofType: "txt") 我可以使用这个文件路径从文件读取就好了,并写入它,但问题是我目前正在使用模拟器,因为我还没有访问iOS 8的iPhone,而且每次都应用程序在模拟器中运行,创建了一个新的文件路径,我假设这是因为我实际上是一遍又一遍地安装和卸载应用程序,模拟器上的应用程序与我在Xcode中编辑的应用程序是分开的,并且模拟器不提供定期返回主屏幕的方法。因此,对硬币所做的任何更改都不会保留,因为每次再次运行应用程序时,硬币数量将成为指定给应用程序中coins.txt文件的数字,该文件尚未更改。当应用程序安装在物理设备上时,此问题是否仍然存在?

此外,当应用程序发布到App Store并上传更新时,由于coins.txt文件的默认内容为0并且更新应用程序只是用新的应用程序替换旧应用程序,玩家是否硬币被重置为0?如果是这样,我该如何防止这种情况发生?

提前致谢!

1 个答案:

答案 0 :(得分:2)

您可以从mainBundle读取但无法写入。您需要将文件复制到另一个目录(考虑缓存目录)并在那里读/写。

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);  
NSString *documentsPath = [paths objectAtIndex:0]; 
NSString *filePath = [documentsPath stringByAppendingPathComponent:@"coins.text"]; 
NSData *coinsData = [NSData dataWithContentsOfFile:filePath];

但是,或许更适合您要实现的目标(轻量级数据存储)将使用NSUserDefaults。

修改

// Setting

NSUserDefaults.standardUserDefaults().setInteger(10, forKey: "coins")
NSUserDefaults.standardUserDefaults().synchronize()

// Getting

var coins = NSUserDefaults.standardUserDefaults().integerForKey("coins")