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),但是需要在刷新时只刷 ...
随机推荐
- docker学习笔记16:Dockerfile 指令 ADD 和 COPY介绍
一.ADD指令 ADD指令的功能是将主机构建环境(上下文)目录中的文件和目录.以及一个URL标记的文件 拷贝到镜像中. 其格式是: ADD 源路径 目标路径 如: #test FROM ubunt ...
- Cannot drop the database ‘XXX’ because it is being used for replication.
删除订阅数据库的时候出现下面的错误: Cannot drop the database ‘XXX’ because it is being used for replication. 数据库的状态为 ...
- 保护DNS服务器3大方法
保护DNS服务器3大方法 DNS全称DomainNameSystem域名解析系统,通俗地说,DNS就是帮助用户在Internet上寻找名称与IP对应的解析服务.为了更方便使用网络资源,DN ...
- 演练2-2:Guestbook示例应用程序
为使Guestbook应用程序有用,我们需要为用户提供一些提交数据的方式,将这些数据存储起来,以便稍后进行查看.为了达到这一目标,我们打算对应用程序添加一个数据库,将其作为该留言簿的后台存储库. 1. ...
- 获取证书以用于 Windows Azure 网站 (WAWS)
编辑人员注释:本文章由 Windows Azure 网站团队的项目经理 Erez Benari 撰写. 近年来,随着网络犯罪的上升,使用 SSL 保护网站逐渐成为一项备受追捧的功能,Windows A ...
- ADO.NET 2SqlDataAdapter、DataSet 的基本用法
数据集完全独立于数据源,可以与数据源链接或者完全断开,其基本作用是为存储在内存缓存中的的数据提供关系视图 如果只是想读取和显示数据,则值需要使用数据读取器,尤其是处理大量数据的时候 如果需要处理数据, ...
- perl malformed JSON string, neither tag, array, object, number, string or atom, at character offset
[root@wx03 ~]# cat a17.pl use JSON qw/encode_json decode_json/ ; use Encode; my $data = [ { 'name' = ...
- 经典系统windows xp sp3官方原版下载(附XP序列号)
经典系统windows xp sp3官方原版下载(附XP序列号) 在过几日,微软最新的操作系统windows 7就将像外发售了!虽然Vista操作系统已经问世多年,但XP系统仍然占据着王位,在市 ...
- [Boost基础]并发编程——asio网络库——异步socket处理
异步服务器端 #include <conio.h> #include <iostream> using namespace std; #include <boost/as ...
- FMX对象释放
今天盒子中有朋友遇到对象释放的问题,原文在这里,他的实现大意是建立一个TmyLayout = class(TLayout),然后在这个类中画线,Form对象调用实例化这个类来画线,然后释放掉这个对象, ...