NSUserDefaults适合存储轻量级的本地客户端数据,比如记住密码功能,要保存一个系统的用户名、密码。使用
NSUserDefaults是首选。下次再登陆的时候就可以直接从
NSUserDefaults里面读取上次登陆的信息。
一般来说本地存储数据我们还可以是用
sqlite数据库,或者使用自己建立的
plist文件什么的,但这还得自己显示创建文件,读取文件,很麻烦,而是用
NSUserDefaults则不用管这些东西,就像读字符串一样,直接读取就可以了。
1,下面通过一个样例演示NSUserDefaults的用法:
(2)往后运行时直接从
NSUserDefaults中把用户id取出
1
2
3
4
5
6
7
8
9
10
11
12
|
class
func
get_uuid() ->
String
{
var
userid =
NSUserDefaults
.standardUserDefaults().stringForKey(
"hangge"
)
if
(userid !=
nil
){
return
userid!
}
else
{
uuid_ref =
CFUUIDCreate
(
)
uuid_string_ref =
CFUUIDCreateString
,uuid_ref)
uuid:
=
NSString
(format: uuid_string_ref)
.standardUserDefaults().setObject(uuid,forKey:
)
uuid
}
}
|
2,对原生数据类型的储存和读取
userDefault =
NSUserDefaults
.standardUserDefaults()
//AnyObject
objectValue:
AnyObject
? = userDefault.objectForKey(
)
//Int类型
userDefault.setInteger(12345,monospace!important; min-height:auto!important; color:blue!important; background:none!important">"Int"
)
intValue = userDefault.integerForKey(
//Float类型
userDefault.setFloat(3.2,monospace!important; min-height:auto!important; color:blue!important; background:none!important">"Float"
)
floatValue = userDefault.floatForKey(
)
//Double类型
userDefault.setDouble(5.2240,monospace!important; min-height:auto!important; color:blue!important; background:none!important">"Double"
)
doubleValue = userDefault.doubleForKey(
)
//Bool类型
boolValue = userDefault.boolForKey(
)
//NSURL类型
userDefault.setURL(
NSURL
(string:
"http://hangge.com"
)!,monospace!important; min-height:auto!important; color:blue!important; background:none!important">"NSURL"
)
urlValue = userDefault.
@H_455_403@
URLForKey
(
)
//NSString类型
"NSString"
)
nsStringValue = userDefault.objectForKey(
)
as
!
NSString
//NSNumber类型
number:
NSNumber
=
(int:22)
userDefault.setObject(number,monospace!important; min-height:auto!important; color:blue!important; background:none!important">"NSNumber"
)
number = userDefault.objectForKey(
NSNumber
//NSArray类型
array:
NSArray
NSArray
(array: [
"123"
"456"
])
userDefault.setObject(array,monospace!important; min-height:auto!important; color:blue!important; background:none!important">"NSArray"
)
//NSDictionaryy类型
dictionary:
NSDictionary
NSDictionary
(dictionary: [
"1"
:
])
userDefault.setObject(dictionary,monospace!important; min-height:auto!important; color:blue!important; background:none!important">"NSDictionary"
)
dictionary = userDefault.objectForKey(
NSDictionary
|
3,系统对象的存储与读取
系统对象实现存储,需要通过 archivedDataWithRootObject方法转换成 NSData为载体,才可以存储。下面以 UIImage对象为例:
userDefault =
//UIImage对象存储
//将对象转换成NSData流
image =
UIImage
(named:
"apple.png"
imageData:
NSData
NSKeyedArchiver
.archivedDataWithRootObject(image!)
//存储NSData对象
userDefault.setObject(imageData,monospace!important; min-height:auto!important; color:blue!important; background:none!important">"imageData"
//UIImage对象读取
//获取NSData
objData:
= userDefault.objectForKey(
NSData
//还原对象
myImage =
NSKeyedUnarchiver
.unarchiveObjectWithData(objData)
UIImage
println
(myImage)
|
4,自定义对象的存储和读取
如果想要存储自己定义的类,首先需要对该类实现 NSCoding协议来进行归档和反归档(序列化和反序列化)。即该类内添加 func encodeWithCoder(_encoder:NSCoder)方法和 init(coder decoder:NSCoder)方法,将属性进行转换。
//自定义对象存储
model =
UserInfo
(name:
"航歌"
"3525"
//实例对象转换成NSData
modelData:
NSData
NSKeyedArchiver
.archivedDataWithRootObject(model)
userDefault.setObject(modelData,monospace!important; min-height:auto!important; color:blue!important; background:none!important">"myModel"
//自定义对象读取
myModelData = userDefault.objectForKey(
NSData
myModel =
.unarchiveObjectWithData(myModelData)
!
UserInfo
//----- 自定义对象类 -----
class
:
NSObject
{
name:
String
phone:
String
//构造方法
init
(name:
=
""
String
){
self
.name = name
.phone = phone
super
.
()
}
//从nsobject解析回来
(coder aDecoder:
NSCoder
!){
.name=aDecoder.decodeObjectForKey(
"Name"
String
.phone=aDecoder.decodeObjectForKey(
"Phone"
String
}
//编码成object
encodeWithCoder(aCoder:
NSCoder
!){
aCoder.encodeObject(name,monospace!important; min-height:auto!important; background:none!important">)
aCoder.encodeObject(phone,monospace!important; min-height:auto!important; background:none!important">)
}
}
|
5,删除存储对象
通过 removeObjectForKey()方法可以删除已保存的数据。当然如果这个存储对象不存在也不会报错。
.standardUserDefaults().removeObjectForKey(
)
|
原文出自: www.hangge.com 转载请保留原文链接: http://www.hangge.com/blog/cache/detail_668.html