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

时间:2015-03-24 14:57:20

标签: ios iphone swift xcode6

我有一个用户输入某些信息的应用。每次用户想要时,他都会在表格列表中添加新项目。当用户完成后,他们点击完成按钮以完成列表,他们可以开始另一个列表。

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

在我的应用中,每次用户将项目添加到列表中,然后进入主屏幕并锁定手机,一段时间后项目消失。所以他们添加的信息不会保存。我想在每次应用程序最小化或最大化时使用AppDelegate.swift中的函数来保存信息和加载信息。我的问题是,保存这些信息的最佳方法是什么?我只是写一个文件并从文件中读取,还是有办法自动保存和加载这些信息?我已经阅读了有关将对象保存到.plist的内容,但我不一定知道它是如何工作的,因为当我点击info.plist时,它只是将我带到设置表而没有代码。

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

免责声明:我是一位经验丰富的Objective-C开发人员,但对Swift来说还是一个新手。我的答案将是面向目标的。

你有很多选择。另一张海报建议使用Core Data,但除非你有复杂的信息需要保存,否则这可能有些过分。核心数据是一个庞大而复杂的框架,具有陡峭的学习曲线。它非常强大,但是在您能够流利地使用它之前,我希望能花一到两周的紧张学习。

最简单,最干净的方法通常是使用NSUserDefaults。它是一个Cocoa类,可以将键/值对读/写到应用程序沙箱中的系统维护文件中。 (基本上是一个自动读/写到系统文件的字典。)你不需要知道它的工作原理的细节 - 它只是起作用。有关详细信息,请参阅NSUserDefaults上的Xcode文档。

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

要保存到NSUserDefaults和属性列表,您保存的对象及其包含的任何对象(如果它是容器对象)必须是"属性列表&的简短列表的成员#34;对象(字典,数组,字符串,数字(整数和浮点数),日期,二进制数据和布尔值。)在Xcode文档中搜索"属性列表类型和对象"有关属性列表和支持的数据类型的更多信息。

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

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

各种Cocoa触控类还包括对自动状态恢复的支持,但这比我在这里有时间要多。

答案 1 :(得分:0)

我建议将核心数据用于数据持久性

请浏览ray wenderlich tutorial for core data