iphone 应用程序进入后台或前台状态时如何保存数据?

How do you save data when the iphone app goes to background or foreground state?

我有一个应用程序,用户可以在其中输入特定信息。每次用户想要时,他都会将一个新项目添加到 table 列表中。当用户完成后,他们单击完成按钮完成列表,然后他们可以开始另一个列表。

AppDelegate.swift 文件中,我看到了一些预先存在的函数。 applicationDidEnterBackground 说要在应用程序进入后台之前保存信息(我假设是在用户在使用应用程序时按下主页按钮时...)。

在我的应用程序中,每次用户将项目添加到列表,然后转到主屏幕并锁定 phone,一段时间后项目就会消失。所以他们添加的信息不会保存。我正在考虑使用 AppDelegate.swift 中的功能来保存信息并在每次最小化或最大化应用程序时加载信息。我的问题是,保存这些信息的最佳方式是什么?我会只写入文件并从文件中读取,还是有办法自动保存和加载此信息?我读过一些关于将对象保存到 .plist 的内容,但我不一定知道它是如何工作的,因为当我单击 info.plist 时,它只是将我带到 table 的设置并且没有代码.

提前感谢您的帮助!

我会建议使用核心数据进行数据持久化

请通过ray wenderlich tutorial for core data

免责声明:我是一名经验丰富的 Objective-C 开发人员,但对 Swift 还是个新手。我的回答将以 Objective-C 为导向。

你有很多选择。另一位发帖人建议使用 Core Data,但这可能有点矫枉过正,除非您要保存复杂的信息。 Core Data 是一个庞大、复杂的框架,具有陡峭的学习曲线。它非常强大,但在您能够流畅地使用它之前,需要花一两周的时间进行深入研究。

最简单、最干净的方法通常是使用 NSUserDefaults。它是 Cocoa class,reads/writes key/value 与应用程序沙盒中系统维护的文件配对。 (本质上是一个自动 read/written 到系统文件的字典。)您不需要了解它如何工作的细节——它就是工作。有关详细信息,请参阅 Xcode NSUserDefaults 文档。

另一种选择确实是使用 属性 列表。 Cocoa NSArray 和 NSDictionary 等容器对象包含保存和读取自身 to/from 属性 列表的方法。寻找像 writeToFile:atomically: 这样的方法。

为了同时保存到 NSUserDefaults 和 属性 列表,您保存的对象及其包含的任何对象(如果它是容器对象)必须是 "property list" 对象(字典、数组、字符串、数字(整数和浮点数)、日期、二进制数据和布尔值。)在 "Property List Types and Objects" 上的 Xcode 文档中搜索有关 属性 列出和支持的数据类型。

第三种选择是在所有要保存的对象(整个"object graph")中实现 NSCoding 协议,然后使用 NSKeyedArchiver 将根对象(通常是容器对象)保存到磁盘方法 archiveRootObject:toFile:

使用所有这些选项,您可以实现应用委托方法 applicationDidEnterBackground,并在调用时保存您的状态数据。然后,您将在 applicationDidFinishLaunching 方法中重新加载数据。 (当你 return 到前台时,你不需要加载你保存的状态数据,因为如果你 return 到前台,你的应用程序仍然是 运行 并且它的状态数据仍在内存中。)

各种 Cocoa 触摸 classes 也包括对自动状态恢复的支持,但我没有时间在这里介绍。