Swift - 使用NSUserDefaults来进行本地数据存储
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类型 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" ) } } |
Swift - 使用NSUserDefaults来进行本地数据存储的更多相关文章
- iOS开发——数据持久化&使用NSUserDefaults来进行本地数据存储
使用NSUserDefaults来进行本地数据存储 NSUserDefaults适合存储轻量级的本地客户端数据,比如记住密码功能,要保存一个系统的用户名.密码.使用NSUserDefaults是首 ...
- iOS APP之本地数据存储(译)
最近工作中完成了项目的用户信息本地存储,查阅了一些本地存储加密方法等相关资料.期间发现了一个来自印度理工学院(IIT)的信息安全工程师的个人博客,写了大量有关iOS Application secur ...
- iOS开发技术分享(1)— iOS本地数据存储
iOS开发技术分享(1)— iOS本地数据存储 前言: 我本是一名asp.net程序员,后来加入了iOS游戏开发队伍,到现在也有一年多的时间了.这一年来,每天都干到2.3点钟才睡觉,不为别的,只为了学 ...
- Android本地数据存储复习
Android本地数据存储复习 Android无论是应用层还是系统层都需要在本地保存一些数据,尤其在应用层中使用的就更为普遍,大体有这么几种:SharedPreference,file,sqlite数 ...
- Windows 8 应用开发 - 本地数据存储
原文:Windows 8 应用开发 - 本地数据存储 在应用中通常会遇到用户主动或被动存储信息的情况,当应用关闭后这些数据仍然会存储在本地设备上,用户下次重新激活应用时会自动加载这些数据.下 ...
- 浏览器本地数据存储解决方案以及cookie的坑
本地数据存储解决方案以及cookie的坑 问题: cookie过长导致页面打开失败 背景: 在公司的项目中有一个需求是打开多个工单即在同一个页面中打开了多个tab(iframe),但是需要在刷新时只刷 ...
- Android之ListView,AsyncTask,GridView,CardView,本地数据存储,SQLite数据库
版权声明:未经博主允许不得转载 补充 补充上一节,使用ListView是用来显示列表项的,使用ListView需要两个xml文件,一个是列表布局,一个是单个列表项的布局.如我们要在要显示系统所有app ...
- cocos2d-html5开发之本地数据存储
做游戏时常常须要的一个功能呢就是数据的保存了,比方游戏最高分.得到的金币数.物品的数量等等.cocos2d-html5使用了html5.所以html5的数据保存方法是对引擎可用的: html5本地数据 ...
- 本地数据存储解决方案以及cookie的坑
本地数据存储解决方案以及cookie的坑 问题: cookie过长导致页面打开失败 背景: 在公司的项目中有一个需求是打开多个工单即在同一个页面中打开了多个tab(iframe),但是需要在刷新时只刷 ...
随机推荐
- 解决win7 中source insight没有courier new字节的问题
解决win7 中source insight没有courier new字节的问题 http://blog.csdn.net/season_hangzhou/article/details/18665 ...
- Ibatis的分页机制的缺陷
我们知道,Ibatis为我们提供了可以直接实现分页的方法 queryForList(String statementName, Object parameterObject, int skipResu ...
- selenium中用js定位html上没有id,没有name的元素
所测试的页面包含display:none的元素,所以考虑用js,在使用js的过程中,js要获得页面的对象,没有id,没有name ...... <a class="employer&q ...
- docker学习笔记1:docke环境的查看
本文的操作是在ubuntu操作系统下的. 一.环境检查 当登录一个安装了docker的机器后,首先我们要检查下docker环境如何. 1.命令:docker -v 上述命令返回安装的docker的版本 ...
- cocos2d-x游戏开发系列教程-中国象棋04-摆棋
前情回顾 在之前的学习中,我们已经了解到,下棋主界面是由CCMainMenu类实现的,在它的init函数中,初始化了 主界面需要的各种数据,包括:创建控件,初始化32个棋子,初始化执行变量等等,在这个 ...
- android如何用adb shell启动应用程序
昨天研究了很久,可能由于基础比较菜吧,所以,没有搜到一个可以直接解决问题的,需要综合几个之后,问题得以解决,记下方法,为了方便自己之后遇到同样问题,也为了方便搜索同样问题的朋友. 主要用到了aapt和 ...
- [置顶] oracle存储过程中单引号及字符串拼接处理
在ORACLE中,单引号有两个作用,一是字符串是由单引号引用,二是转义.单引号的使用是就近配对,即就近原则.而在单引号充当转义角色时相对不好理解 1.从第二个单引号开始被视为转义符,如果第二个单引号后 ...
- boost uuid
uuid: uuid库是一个小的使用工具,可以表示和生成UUID UUID是University Unique Identifier的缩写,它是一个128位的数字(16字节),不需要有一个中央认证机构 ...
- C#的静态构造函数
“静态构造函数”典型应用于第一次使用类时的初始化工作,注意“第一次”,意思是它只执行一次. 有同学说了,类的初始化不是有构造函数嘛?我们回答:构造函数是每个实例被声明时都会执行的,它属于每一个实例,而 ...
- ASP.NET中IsPostBack详解(转载)
1.IsPostBack介绍Page.IsPostBack是一个标志:当前请求是否第一次打开. 调用方法为:Page.IsPostBack或者IsPostBack或者this.IsPostBack或者 ...