对于许多应用程序而言,一个真正重要的功能是能够存储用户数据。 您的应用在各个方面都可能令人赞叹,但如果它不记得用户做了什么,那就会很烦人。
您可能要存储数据的原因包括:
还有许多其他。 幸运的是,这根本不是一件困难的任务。 使用NSUSerDefaults类可以非常容易地存储诸如Strings和Integers之类的简单项目。 NSUserDefaults类提供了与默认系统的接口,可以对默认系统进行自定义以匹配用户的首选项,例如度量单位。
要在其中设置自己的值,请使用以下代码行:
NSUserDefaults.standardUserDefaults()。setValue(,forKey:)
举个例子:
NSUserDefaults.standardUserDefaults()。setValue(“ red”,forKey:“ colour”)
在这里,我们将字符串“ red”存储在名为“ colour”的键下。 您可以存储任何标准类型,例如Float,Int,String。 要在下次运行应用程序时检索此密钥,我们只需要从给定密钥中索取值,例如:
让SavedColour = NSUserDefaults.standardUserDefaults()。valueForKey(“ colour”)设置为? 串
现在,请注意,您要查找的数据实际上并未显示在手机上。 也许用户已经删除了数据,或者这是该应用程序第一次运行。 不会创建任何密钥。 因此,当您使用此值时,应用程序可能会崩溃。
始终最好在此类声明周围加上保护性声明,例如:
如果让saveColour = NSUserDefaults.standardUserDefaults()。valueForKey(“ colour”)设置为? 字符串{ //在这里使用您提取的数据 } 其他{ //在此处设置默认值供您的应用使用 }
这一切都很棒,并且非常容易实现。 但这不适用于任何自定义类。
假设您已经创建了一个Person类,该类存储了他们的名字和姓氏:
类人 { var firstName:字符串! var lastName:字符串! 初始化(第一个:字符串,最后一个:字符串) { firstName =第一 lastName =最后 } }
您可以使用Person类创建几个人。 也许您的应用程序有一个联系人列表,您将添加电话号码,地址等。
您也将要存储此数据。 您不希望用户每次打开应用程序时都不断添加此数据。 但是,您不能只存储使用NSUserDefaults.standardUserDefaults.setObject()创建的Person。 您将能够存储数据,但由于系统将不知道如何处理数据,因此您将无法撤回该数据。 值得庆幸的是,只需要一点点额外。 您需要使自定义类可存储。
首先,让我们解决Person类:
进口基金会
//继承自NSObject和NSCoding协议 类人员:NSObject,NSCoding { //类变量 var firstName:字符串! var lastName:字符串! //类的启动器,在创建新Person时调用 init(first:String,last:String){ firstName =第一 lastName =最后 } //空初始化器,在下面的所需便利中使用 覆盖init(){} //利用存储的默认值来设置类的便捷方法 需要方便的初始化吗?(编码器aDecoder:NSCoder) { //调用空的初始化程序,以便创建此类的实例 self.init() //使用aDecoder类解码给定键的对象,检索以前存储的内容 self.firstName = aDecoder.decodeObjectForKey(“ firstName”)如? 串 self.lastName = aDecoder.decodeObjectForKey(“ lastName”)如? 串 } // encoder获取Person实例数据并对其进行编码,以便存储数据以备后用 func encodeWithCoder(aCoder:NSCoder) { aCoder.encodeObject(self.firstName,forKey:“ firstName”) aCoder.encodeObject(self.lastName,forKey:“ lastName”) } }
因此,现在,该类知道如何存储数据(编码)以及以后如何访问数据(解码)。
现在,我们可以使用NSUserDefaults存储Person类:
//将People数组转换为数据 让peopleData = NSKeyedArchiver.archivedDataWithRootObject(People) //将数据存储到设备 NSUserDefaults.standardUserDefaults()。setObject(peopleData,forKey:“人”) //同步,以确保所有更改都已写入磁盘 NSUserDefaults.standardUserDefaults()。synchronize()
就是这样! 现在,您已成功将自定义类保存到设备。 当您要加载数据时,只需用键将对象拉出(再次使用保护语句,以确保数据不存在时不会崩溃!)
如果让loadingPeople = NSUserDefaults.standardUserDefaults()。objectForKey(“ People”)设为? NSData { //将数据取消存档为特定的数据类型 如果让peopleArray = NSKeyedUnarchiver.unarchiveObjectWithData(loadedPeople)作为? [人员] { //对提取的数据执行所需的操作 }
我希望这个小教程足够清楚。 但这实际上就是您将数据存储到设备上所需的所有知识。 极其强大,只需很少的代码。
如果不清楚,请发表评论。 谢谢阅读!