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()//AnyObjectuserDefault.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对象读取//获取NSDatavar objData:NSData = userDefault.objectForKey("imageData") as! NSData//还原对象var myImage = NSKeyedUnarchiver.unarchiveObjectWithData(objData) as! UIImageprintln(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")//实例对象转换成NSDatavar modelData:NSData = NSKeyedArchiver.archivedDataWithRootObject(model)//存储NSData对象userDefault.setObject(modelData, forKey: "myModel")//自定义对象读取var myModelData = userDefault.objectForKey("myModel") as! NSDatavar 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),但是需要在刷新时只刷 ...
随机推荐
- stdcall、cdecl、fastcall、thiscall 、naked call的汇编详解
函数调用规范 当高级语言函数被编译成机器码时,有一个问题就必须解决:因为CPU没有办法知道一个函数调用需要多少个.什么样的参数.即计算机不知道怎么给这个函数传递参数,传递参数的工作必须由函数调用者 ...
- iOS 本地化应用程序(NSLocalizedString)
App本地化的需要不用讲大家也都明白,本文将介绍一种简单的方法来实现字符串的本地化. 在不考虑本地化的情况下,我们如果在代码中给一个Button定义title,一般会这样写: btn.titleLab ...
- activity变成Dialog的样式设置
1.属性解析 <item name="android:windowFrame">@null</item> :Dialog的windowFrame框为无< ...
- JQuery - 改变css样式
jQuery提供css()的方法来实现嵌入式改变元素样式,css()方法在使用上具有多样性.其中一种接受两个输入参数:样式属性和样式值,它们之间用逗号分开.比如我们要改变链接颜色,我们可以使用下面的代 ...
- 菜鸟学习SSH(二)——Struts国际化
国际化(internationalization,i18n)和本地化(localization,l10n)指让产品(出版物,软件,硬件等)能够适应非本地环境,特别是其他的语言和文化.程序在不修改内部代 ...
- Python 第三篇(下):collections系列、集合(set)、单双队列、深浅copy、内置函数
一.collections系列: collections其实是python的标准库,也就是python的一个内置模块,因此使用之前导入一下collections模块即可,collections在py ...
- QList 和std::list的比较
QList QList<T> 是一个Qt通用容器类.它存储一序列的值,并且提供基于索引的数据访问方法和快速的插入和删除操作. QList<T>, QLinkedList< ...
- [思路]为什么要做一个Web服务器
对于.net开发者而言,提到Web服务器最容易想到的就是IIS了. IIS功能强大,配置繁多,但不免对普通用户而言过于复杂,另外在云时代的今天,同时维护多个IIS或远程维护IIS还是有诸多不便的,有很 ...
- android 由于界面控件过多耗时处理办法
在开发当中,有时候可能界面嵌套较多,那么导致控件实例化增多,有时候会大大影响界面加载的速度,特别在viewpage中的时候,要是第一页里面要inflate一个控件比较多的页面的时候,就会影响整个Act ...
- No http handler was found for request type 'GET'
asp.net 运用统计图表的时候,在本地运行,没有问题,发布到服务器上的IIS后,就报这个错误,具体错误 看图 这个图片真恶心,网上找了下,资料不多,但是还是有个能真正解决问题的, 解决方法是,在w ...