使用NSUserDefaults来进行本地数据存储

 
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取出
 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,对原生数据类型的储存和读取

 var userDefault = NSUserDefaults.standardUserDefaults()

 //AnyObject
 userDefault.setObject("hangge.com", forKey: "Object")
 var objectValue:AnyObject? = userDefault.objectForKey("Object")

 //Int类型
 userDefault.setInteger(, 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()
 userDefault.setObject(number, forKey: "NSNumber")
 number = userDefault.objectForKey("NSNumber") as! NSNumber

 //NSArray类型
 var array:NSArray = NSArray(array: ["])
 userDefault.setObject(array, forKey: "NSArray")

 //NSDictionaryy类型
 var dictionary:NSDictionary = NSDictionary(dictionary: [":"hangge.com"])
 userDefault.setObject(dictionary, forKey: "NSDictionary")
 dictionary = userDefault.objectForKey("NSDictionary") as! NSDictionary

3,系统对象的存储与读取
系统对象实现存储,需要通过archivedDataWithRootObject方法转换成NSData为载体,才可以存储。下面以UIImage对象为例:

 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)方法,将属性进行转换。

 var userDefault = NSUserDefaults.standardUserDefaults()

 //自定义对象存储
 var model = UserInfo(name: ")
 //实例对象转换成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

 

iOS开发——数据持久化&使用NSUserDefaults来进行本地数据存储的更多相关文章

  1. iOS开发UI篇—无限轮播(新闻数据展示)

    iOS开发UI篇—无限轮播(新闻数据展示) 一.实现效果        二.实现步骤 1.前期准备 (1)导入数据转模型的第三方框架MJExtension (2)向项目中添加保存有“新闻”数据的pli ...

  2. ios网络学习------4 UIWebView的加载本地数据的三种方式

    ios网络学习------4 UIWebView的加载本地数据的三种方式 分类: IOS2014-06-27 12:56 959人阅读 评论(0) 收藏 举报 UIWebView是IOS内置的浏览器, ...

  3. iOS开发笔记9:NSUserDefaults存储自定义实体对象

    NSUserDefaults常常用来本地存储一些简单的数据,例如用户信息等等,NSUserDefaults支持floats.doubles.integers.Booleans.URLs.NSData. ...

  4. iOS开发网络篇之Web Service和XML数据解析

    郝萌主倾心贡献,尊重作者的劳动成果,请勿转载. 假设文章对您有所帮助,欢迎给作者捐赠,支持郝萌主.捐赠数额任意,重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 游戏官方下 ...

  5. 【iOS开发-60】案例学习:多组数据的tableView设置、添加右側组索引、多层数据模型设置以及valueForKeyPath

    效果: 这里的数据模型有两层:每一组汽车是一层模型,每一组里面的每一行汽车品牌也是一层模型. (1)我们先创建一个WSCars模型. 在WSCars.h中: #import <Foundatio ...

  6. iOS开发点滴 - 如何通过Segue写代码传递数据从一个ViewController到另一个ViewController(Swift代码)

    1. 拖线 按住Control键,用鼠标从源控制器的某个控件开始,拖动到目的控制器 2. 选择弹出类型并设置Segue Identifier 在弹出的对话框中,选择“Selection Segue-& ...

  7. IOS开发---菜鸟学习之路--(三)-数据解析

    第三篇 上一篇我们讲了如何通过NSURL类来获取数据, 这一章我们来讲下对于获取过来的数据如何解析. 好了直接进入正文吧. 正文: 上一篇讲了 我们获取过来的数据格式是JSON格式的 大家可以搜下对应 ...

  8. Swift - 使用NSUserDefaults来进行本地数据存储

    NSUserDefaults适合存储轻量级的本地客户端数据,比如记住密码功能,要保存一个系统的用户名.密码.使用NSUserDefaults是首选.下次再登陆的时候就可以直接从NSUserDefaul ...

  9. iOS数据持久化存储:归档

    在平时的iOS开发中,我们经常用到的数据持久化存储方式大概主要有:NSUserDefaults(plist),文件,数据库,归档..前三种比较经常用到,第四种归档我个人感觉用的还是比较少的,恰恰因为用 ...

随机推荐

  1. [转] C# 中的static静态变量

    logitechyan原文关于C#中static静态变量 C#静态变量使用static 修饰符进行声明,在类被实例化时创建,通过类进行访问不带有 static 修饰符声明的变量称做非静态变量,在对象被 ...

  2. kettle连接hadoop&hdfs图文详解

    1 引言: 项目最近要引入大数据技术,使用其处理加工日上网话单数据,需要kettle把源系统的文本数据load到hadoop环境中 2 准备工作: 1 首先 要了解支持hadoop的Kettle版本情 ...

  3. 按钮点击WIN8 磁贴效果

    <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...

  4. Fitnesse启动参数与配置

    Fitnesse最新版20140630默认启动后,网页风格与 fitnesse.org 的Bootstrap风格完全不一致. 需要配置plugins.properties中的Theme=bootstr ...

  5. OpenGL超级宝典第5版&&缓冲区

    缓冲区有很多用途:可以保存顶点数据,像素数据,纹理数据,着色器处理的输入,不同着色器阶段的输出. 缓冲区保存在GPU内存中,提供高速有效的访问.   像素缓冲区对象: GLuint pixBuffer ...

  6. LeetCode题解——Palindrome Number

    题目: 判断一个数字是不是回文数字,即最高位与最低位相同,次高位与次低位相同,... 解法: 求出数字的位数,然后依次求商和求余判断是否相等. 代码: class Solution { public: ...

  7. Codeforces Round #365 (Div. 2) C - Chris and Road 二分找切点

    // Codeforces Round #365 (Div. 2) // C - Chris and Road 二分找切点 // 题意:给你一个凸边行,凸边行有个初始的速度往左走,人有最大速度,可以停 ...

  8. 在eclipse中配置spark 0.9.1源码的开发环境

    一.准备工作: 1.下载release版spark 0.9.1,本次用的版本是spark-0.9.1-bin-cdh4. 2.下载scala IDE 3.0.2,这个版本ide的支持scala 2.1 ...

  9. homework-02 "最大子数组之和"的问题进阶

    代码编写 这次的作业瞬间难了好多,无论是问题本身的难度或者是单元测试这一原来没接触过的概念或者是命令行参数的处理这些琐碎的问题,都使得这次作业的完成说不上轻松. 最大子数组之和垂直水平相连的拓展问题解 ...

  10. 现代程序设计 homework-05

    本次作业要求设计服务器和客户端,由于之前对网络编程是一窍不通,上上节课听宗学长讲述Tcp的时候心里想这个东西还真是高大上啊一点儿都听不懂,但是上个周末看了看C#网络编程的博客和书之后,发现这个东西入门 ...