我在游戏中使用了一个类似NSUserDefaults的分数结构,希望能在应用程序终止时保存这些值。是否有一些方法可以在重新打开应用程序时从文件中加载并保存?
我在游戏中使用了一个类似NSUserDefaults的分数结构,希望能在应用程序终止时保存这些值。是否有一些方法可以在重新打开应用程序时从文件中加载并保存?
applicationWillTerminate:
(因为背景功能被引入),因此您不应该依赖它。此外,请考虑如果您的应用程序崩溃且没有保存任何用户信息会发生什么-这不是一个好的用户体验。applicationWillTerminate:
来做任何事情...func applicationWillTerminate(_ application: UIApplication) {
let plistPath = getPath()
if !FileManager.default.fileExists(atPath: plistPath) {
FileManager.default.createFile(atPath: plistPath, contents: nil, attributes: nil)
}
let data:NSMutableDictionary = [:]
data.setValue("test_Value", forKey: "test_key")
data.write(toFile: plistPath, atomically: true)
}
func getPath() -> String {
let plistFileName = "data.plist"
let paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)
let documentPath = paths[0] as NSString
let plistPath = documentPath.appendingPathComponent(plistFileName)
return plistPath
}
func displaySavedData() {
let plistPath = self.getPath()
if FileManager.default.fileExists(atPath: plistPath) {
if let savedData = NSMutableDictionary(contentsOfFile: plistPath) {
print(savedData)
}
}
}
应用程序启动时,可以按以下方式访问值:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
displaySavedData()
return true
}
如其他答案所述,“applicationWillTerminate”在应用程序支持后台模式的情况下不会被调用,因此当您的应用程序不支持后台模式并且您知道杀死应用程序将调用“applicationWillTerminate”时,此解决方案非常有用。
applicationWillTerminate
中设置NSUserDefaults
值后,确保您调用[[NSUserDefaults standardDefaults] synchronize]
,以便立即将更改刷新到磁盘并在应用程序启动之间持久化。