储存使用者资料

对于许多应用程序而言,一个真正重要的功能是能够存储用户数据。 您的应用在各个方面都可能令人赞叹,但如果它不记得用户做了什么,那就会很烦人。

您可能要存储数据的原因包括:

  • 用户设置
  • 游戏高分
  • 档案信息
  • 留言内容

还有许多其他。 幸运的是,这根本不是一件困难的任务。 使用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)作为? [人员] {
//对提取的数据执行所需的操作
}

我希望这个小教程足够清楚。 但这实际上就是您将数据存储到设备上所需的所有知识。 极其强大,只需很少的代码。

如果不清楚,请发表评论。 谢谢阅读!