我有一个用户输入某些信息的应用。每次用户想要时,他都会在表格列表中添加新项目。当用户完成后,他们点击完成按钮以完成列表,他们可以开始另一个列表。
在AppDelegate.swift
文件中,我看到了一些预先存在的函数。 applicationDidEnterBackground
表示在应用程序进入后台之前保存信息(我假设用户在使用应用程序时按下主页按钮...)。
在我的应用中,每次用户将项目添加到列表中,然后进入主屏幕并锁定手机,一段时间后项目消失。所以他们添加的信息不会保存。我想在每次应用程序最小化或最大化时使用AppDelegate.swift
中的函数来保存信息和加载信息。我的问题是,保存这些信息的最佳方法是什么?我只是写一个文件并从文件中读取,还是有办法自动保存和加载这些信息?我已经阅读了有关将对象保存到.plist
的内容,但我不一定知道它是如何工作的,因为当我点击info.plist
时,它只是将我带到设置表而没有代码。
提前感谢您的帮助!
答案 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)
我建议将核心数据用于数据持久性