iOS开发——数据持久化&使用NSUserDefaults来进行本地数据存储

使用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取出

 1 class func get_uuid() -> String{
 2     var userid = NSUserDefaults.standardUserDefaults().stringForKey("hangge")
 3     if(userid != nil){
 4         return userid!
 5     }else{
 6         var uuid_ref = CFUUIDCreate(nil)
 7         var uuid_string_ref = CFUUIDCreateString(nil , uuid_ref)
 8         var uuid:String = NSString(format: uuid_string_ref)
 9         NSUserDefaults.standardUserDefaults().setObject(uuid, forKey: "hangge")
10         return uuid
11     }
12 }

2,对原生数据类型的储存和读取

 1 var userDefault = NSUserDefaults.standardUserDefaults()
 2
 3 //AnyObject
 4 userDefault.setObject("hangge.com", forKey: "Object")
 5 var objectValue:AnyObject? = userDefault.objectForKey("Object")
 6
 7 //Int类型
 8 userDefault.setInteger(12345, forKey: "Int")
 9 var intValue = userDefault.integerForKey("Int")
10
11 //Float类型
12 userDefault.setFloat(3.2, forKey: "Float")
13 var floatValue = userDefault.floatForKey("Float")
14
15 //Double类型
16 userDefault.setDouble(5.2240, forKey: "Double")
17 var doubleValue = userDefault.doubleForKey("Double")
18
19 //Bool类型
20 userDefault.setBool(true, forKey: "Bool")
21 var boolValue = userDefault.boolForKey("Bool")
22
23 //NSURL类型
24 userDefault.setURL(NSURL(string:"http://hangge.com")!, forKey: "NSURL")
25 var urlValue = userDefault.URLForKey("NSURL")
26
27 //NSString类型
28 userDefault.setObject("hangge.com", forKey: "NSString")
29 var nsStringValue = userDefault.objectForKey("NSString") as! NSString
30
31 //NSNumber类型
32 var number:NSNumber = NSNumber(int:22)
33 userDefault.setObject(number, forKey: "NSNumber")
34 number = userDefault.objectForKey("NSNumber") as! NSNumber
35
36 //NSArray类型
37 var array:NSArray = NSArray(array: ["123","456"])
38 userDefault.setObject(array, forKey: "NSArray")
39
40 //NSDictionaryy类型
41 var dictionary:NSDictionary = NSDictionary(dictionary: ["1":"hangge.com"])
42 userDefault.setObject(dictionary, forKey: "NSDictionary")
43 dictionary = userDefault.objectForKey("NSDictionary") as! NSDictionary

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

 1 var userDefault = NSUserDefaults.standardUserDefaults()
 2
 3 //UIImage对象存储
 4 //将对象转换成NSData流
 5 var image = UIImage(named: "apple.png")
 6 var imageData:NSData = NSKeyedArchiver.archivedDataWithRootObject(image!)
 7 //存储NSData对象
 8 userDefault.setObject(imageData, forKey: "imageData")
 9
10 //UIImage对象读取
11 //获取NSData
12 var objData:NSData = userDefault.objectForKey("imageData") as! NSData
13 //还原对象
14 var myImage = NSKeyedUnarchiver.unarchiveObjectWithData(objData) as! UIImage
15 println(myImage)

4,自定义对象的存储和读取
如果想要存储自己定义的类,首先需要对该类实现NSCoding协议来进行归档和反归档。即该类内添加func encodeWithCoder(_encoder:NSCoder)方法和init(coder decoder:NSCoder)方法,将属性进行转换。

 1 var userDefault = NSUserDefaults.standardUserDefaults()
 2
 3 //自定义对象存储
 4 var model = UserInfo(name: "航歌", phone: "3525")
 5 //实例对象转换成NSData
 6 var modelData:NSData = NSKeyedArchiver.archivedDataWithRootObject(model)
 7 //存储NSData对象
 8 userDefault.setObject(modelData, forKey: "myModel")
 9
10 //自定义对象读取
11 var myModelData = userDefault.objectForKey("myModel") as! NSData
12 var myModel = NSKeyedUnarchiver.unarchiveObjectWithData(myModelData) as! UserInfo
时间: 2024-10-12 19:38:36

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

iOS数据持久化之二——归档与设计可存储化的数据模型基类

iOS数据持久化之二--归档与设计可存储化的数据模型基类 一.引言 在上一篇博客中,我们介绍了用plist文件进行数据持久化的方法.虽然简单易用,但随着开发的深入,你会发现,这种方式还是有很大的局限性.试想,如果我们可以将用户的登录返回信息模型,游戏中角色的属性信息模型进行直接的持久化存取,那是不是非常爽的事,幸运的是,我们可以通过归档,来设计一个这样的数据模型. 二.先来精通归档吧 归档也是iOS提供给开发者的一种数据存储的方式,事实上,几乎所有的数据类型都可以通过归档来进行存取.其存储与读取

iOS开发项目篇—32添加上拉刷新数据

iOS开发项目篇—32添加上拉刷新数据 一.简单说明 图片示意 思路:可以自定义一个view(示意xib),在view中添加一个label和菊花,指示状态.把这个view设置为tableView的底部视图. 二.实现过程 1.新建一个类和xib,关联 (1)创建一个类,让其继承自UIView (2)创建一个xib文件,用来定义上拉提示框 (3)定义的xib文件,把类和xib文件进行关联 2.实现代码: YYlaodStatusesFooter.h文件 1 // 2 // YYlaodStatus

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

UIWebView是IOS内置的浏览器,可以浏览网页,打开文档  html/htm  pdf   docx  txt等格式的文件.  safari浏览器就是通过UIWebView做的. 服务器将MIME的标识符等放入传送的数据中告诉浏览器使用那种插件读取相关文件. uiwebview加载各种本地文件(通过loadData方法): - (void)viewDidLoad { [super viewDidLoad]; [self setupUI]; NSString *path = [[NSBund

iOS 数据持久化之NSUserDefaults

原创Blog,转载请注明 blog.csdn.net/hello_hwc 前言:iOS的数据持久化存储分为很多种 普通文件,plist NSUserDefaults CoreData KeyChain 本文讲解NSUserDefaults的使用 StandardUserDefaults 大部分的时候使用StandardUserDefaults来保存数据,这是一个共享的UserDefaults,意味着在程序的任意一个地方访问到的都是同一个UserDefaults 写数据 swift代码 var u

IOS数据持久化之NSUserDefaults

NSUserDefaults: 用来保存应用程序设置和属性.用户保存的数据.              用户再次打开程序或开机后这些数据仍然存在.              可以存储的数据类型包括: NSData.NSString.NSNumber.NSDate.NSArray.NSDictionary.             如果要存储其他类型,则需要转换为前面的类型,才能用NSUserDefaults存储. 代码如下: //保存数据 NSUserDefaults * defaults =

iOS开发——网络编程OC篇&(九)数据解析

数据解析 关于iOS开发的中数据解析的方法有两种JSON和XML,这里只做简单的介绍,会使用就可以了. JSON—— 关于JSON的解析经过很多爱好者的分析使用相同自带的还是最好的,不管是从使用的容易度还是性能方面 NSJSONSerialization 1 -(void)start 2 { 3 4 NSString* path = [[NSBundle mainBundle] pathForResource:@"Notes" ofType:@"json"]; 5

iOS开发——网络编程OC篇&(三)数据请求

一.GET请求和POST请求简单说明 创建GET请求 1 // 1.设置请求路径 2 NSString *urlStr=[NSString stringWithFormat:@"http://192.168.1.53:8080/MJServer/login?username=%@&pwd=%@",self.username.text,self.pwd.text]; 3 NSURL *url=[NSURL URLWithString:urlStr]; 4 5 // 2.创建请求对

iOS开发-功能篇-国际化|NSUserDefaults

/*=========================================软件国际化================================================*/ 1.简介: 软件国际化主要是在软件中添加多种语言,以实现不同国家的人群需求. 主要的应用方式有两种:1.根据系统的语言环境自动进行切换;2.人为的添加按钮等进行主动切换. 目前实现的主要方法有两种:1.Xcode可视化界面添加Localizations的操作.2.利用NSLocalizedString

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

郝萌主倾心贡献,尊重作者的劳动成果,请勿转载. 假设文章对您有所帮助,欢迎给作者捐赠,支持郝萌主.捐赠数额任意,重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 游戏官方下载:http://dwz.cn/RwTjl 游戏视频预览:http://dwz.cn/RzHHd 游戏开发博客:http://dwz.cn/RzJzI 游戏源代码传送:http://dwz.cn/Nret1 在iPhone和后台系统的通信中,使用Web Service获取server数据上最常见的一