Swift NSUserDefaults
来源:互联网 发布:数据网关 编辑:程序博客网 时间:2024/04/28 17:14
NSUserDefaults 适合存储轻量级的本地客户端数据,比如记住密码功能,要保存一个系统的用户名、密码。使用 NSUserDefaults 是首选。下次再登陆的时候就可以直接从 NSUserDefaults 里面读取上次登陆的信息。
一般来说本地存储数据我们还可以是用 SQlite 数据库,或者使用自己建立的 plist 文件什么的,但这还得自己显示创建文件,读取文件,很麻烦,而是用 NSUserDefaults 则不用管这些东西,就像读字符串一样,直接读取就可以了。
NSUserDefaults 支持的数据格式也很多,有:Int,Float,Double,BOOL,甚至 AnyObject 类型。
1,下面通过一个样例演示NSUserDefaults的用法:
(1)如果是第一次运行程序通过 CFUUIDCreate 方法生成一个唯一字符串作为用户id储存起来(形如:B8DDB58D-73BF-4E39-A051-365858FC4626)
(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
{
var
uuid_ref =
CFUUIDCreate
(
nil
)
var
uuid_string_ref =
CFUUIDCreateString
(
nil
, uuid_ref)
var
uuid:
String
=
NSString
(format: uuid_string_ref)
NSUserDefaults
.standardUserDefaults().setObject(uuid, forKey:
"hangge"
)
return
uuid
}
}
2,对原生数据类型的储存和读取
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
var
userDefault =
NSUserDefaults
.standardUserDefaults()
//AnyObject
userDefault.setObject(
"hangge.com"
, forKey:
"Object"
)
var
objectValue:
AnyObject
? = userDefault.objectForKey(
"Object"
)
//Int类型
userDefault.setInteger(12345, forKey:
"Int"
)
var
intValue = userDefault.integerForKey(
"Int"
)
//Float类型
userDefault.setFloat(3.2, forKey:
"Float"
)
var
floatValue = userDefault.floatForKey(
"Float"
)
//Double类型
userDefault.setDouble(5.2240, forKey:
"Double"
)
var
doubleValue = userDefault.doubleForKey(
"Double"
)
//Bool类型
userDefault.setBool(
true
, forKey:
"Bool"
)
var
boolValue = userDefault.boolForKey(
"Bool"
)
//NSURL类型
userDefault.setURL(
NSURL
(string:
"http://hangge.com"
)!, forKey:
"NSURL"
)
var
urlValue = userDefault.
URLForKey
(
"NSURL"
)
//NSString类型
userDefault.setObject(
"hangge.com"
, forKey:
"NSString"
)
var
nsStringValue = userDefault.objectForKey(
"NSString"
)
as
!
NSString
//NSNumber类型
var
number:
NSNumber
=
NSNumber
(int:22)
userDefault.setObject(number, forKey:
"NSNumber"
)
number = userDefault.objectForKey(
"NSNumber"
)
as
!
NSNumber
//NSArray类型
var
array:
NSArray
=
NSArray
(array: [
"123"
,
"456"
])
userDefault.setObject(array, forKey:
"NSArray"
)
//NSDictionaryy类型
var
dictionary:
NSDictionary
=
NSDictionary
(dictionary: [
"1"
:
"hangge.com"
])
userDefault.setObject(dictionary, forKey:
"NSDictionary"
)
dictionary = userDefault.objectForKey(
"NSDictionary"
)
as
!
NSDictionary
3,系统对象的存储与读取
系统对象实现存储,需要通过 archivedDataWithRootObject 方法转换成 NSData 为载体,才可以存储。下面以 UIImage 对象为例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var
userDefault =
NSUserDefaults
.standardUserDefaults()
//UIImage对象存储
//将对象转换成NSData流
var
image =
UIImage
(named:
"apple.png"
)
var
imageData:
NSData
=
NSKeyedArchiver
.archivedDataWithRootObject(image!)
//存储NSData对象
userDefault.setObject(imageData, forKey:
"imageData"
)
//UIImage对象读取
//获取NSData
var
objData:
NSData
= userDefault.objectForKey(
"imageData"
)
as
!
NSData
//还原对象
var
myImage =
NSKeyedUnarchiver
.unarchiveObjectWithData(objData)
as
!
UIImage
println
(myImage)
4,自定义对象的存储和读取
如果想要存储自己定义的类,首先需要对该类实现 NSCoding 协议来进行归档和反归档(序列化和反序列化)。即该类内添加 func encodeWithCoder(_encoder:NSCoder) 方法和 init(coder decoder:NSCoder) 方法,将属性进行转换。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
var
userDefault =
NSUserDefaults
.standardUserDefaults()
//自定义对象存储
var
model =
UserInfo
(name:
"航歌"
, phone:
"3525"
)
//实例对象转换成NSData
var
modelData:
NSData
=
NSKeyedArchiver
.archivedDataWithRootObject(model)
//存储NSData对象
userDefault.setObject(modelData, forKey:
"myModel"
)
//自定义对象读取
var
myModelData = userDefault.objectForKey(
"myModel"
)
as
!
NSData
var
myModel =
NSKeyedUnarchiver
.unarchiveObjectWithData(myModelData)
as
!
UserInfo
//----- 自定义对象类 -----
class
UserInfo
:
NSObject
{
var
name:
String
var
phone:
String
//构造方法
init
(name:
String
=
""
,phone:
String
=
""
){
self
.name = name
self
.phone = phone
super
.
init
()
}
//从nsobject解析回来
init
(coder aDecoder:
NSCoder
!){
self
.name=aDecoder.decodeObjectForKey(
"Name"
)
as
!
String
self
.phone=aDecoder.decodeObjectForKey(
"Phone"
)
as
!
String
}
//编码成object
func
encodeWithCoder(aCoder:
NSCoder
!){
aCoder.encodeObject(name,forKey:
"Name"
)
aCoder.encodeObject(phone,forKey:
"Phone"
)
}
}
5,删除存储对象
通过 removeObjectForKey() 方法可以删除已保存的数据。当然如果这个存储对象不存在也不会报错。
1
NSUserDefaults
.standardUserDefaults().removeObjectForKey(
"hangge"
)
原文出自:www.hangge.com 转载请保留原文链接:http://www.hangge.com/blog/cache/detail_668.html
0 0
- Swift NSUserDefaults
- swift NSUserDefaults封装
- swift - NSUserDefaults 的使用
- Swift NSUserDefaults本地数据保存
- NSUserDefaults的使用(IOS - Swift)
- Swift简单的本地存储方式NSUserDefaults
- Swift-->NSUserDefaults键值对,Android中的SharedPreferences
- NSUserDefaults
- NSUserDefaults
- NSUserDefaults
- NSUserDefaults
- NSUserDefaults
- NSUserDefaults
- NSUserDefaults
- NSUserDefaults
- NSUserDefaults
- NSUserDefaults
- NSUserDefaults
- 9.26 RSorder offer 80% off oldschool runescape gold for The Fairy Rings
- 数据库的读写分离
- Markdown文档中的UML
- 编译程序遇到问题 relocation R_X86_64_32 against `.rodata' can not be used when making a shared object;
- 接口与抽象类的区别
- Swift NSUserDefaults
- python中创建临时文件夹
- RabbitMQ 与SpringMvc的配置使用
- Linux命令之查看文件占用空间大小-du,df
- scrollView xib用autolayout 让其中的imgView滚动
- swift 手势相关小知识点
- Linux 火狐 flash更新
- 翻转课堂4周后交流
- 秒杀场景下MySQL的低效原因和改进