重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
一、 首先简述一下 Userdefault (介绍使用了该作者的文章)
成都创新互联公司主要从事成都网站制作、成都做网站、网页设计、企业做网站、公司建网站等业务。立足成都服务中卫,10年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18982081108
1.适合存储轻量级的本地数据。
比如用户id 用户的登录token什么的 这种比较短小的数据
2.NSUserDefaults支持的数据格式有:NSNumber、NSData、NSDate、NSString、NSArray、NSDictionary、BOOL。
3.以键值对的形式进行存储。
4.存储时间为整体应用程序的存储时间,如果想需要删除,需要删除整体应用程序。
⚠️ 存储声明的时候因为是动态的,先声明再调用,声明存储的时候不会出现异常提示,但执行的时候会出现 --断言--(因为存储对象在这里编译是nil)
iOS 开发中一般有如下几种数据存储方式,需要根据具体的业务场景,选择合适的数据存储方式。
用户默认设置 – 这种情况通常不需要用户干预,如游戏通关信息,Video播放记录,退出之后下次进入时恢复到退出时的情况。
设置束提供了一个通过 iPhone、iPad的设置应用程序进行配置的接口。
直接访问文件系统读写属于当前App的iOS文件系统部分的文件。
SQLite 数据库是嵌入式的和轻量级的SQL数据库,SQLite 是由C实现的。
远端数据库这个一般由App调用远端的RESTFulWCF服务,将JSON、XML 数据传递给远端的 Web 服务,读写数据库的逻辑完全在 Web 服 务端实现。
iOS本地数据保存有多种方式,归纳如下:
本章不仅是学习多种数据存储方式,也可学习到其他知识点,下面就让我们详细来看:
具体方法为:
第一步:获得文件即将保存的路径,并生成在该路径下的文件:
第二步:往文件中写入/读取:
方法一:
方法二:
方法三:
2.NSUserDefaults:是一个单例对象,在整个应用程序的生命周期中都只有一个实例。用来保存应用程序设置和属性、用户保存的数据。存储在沙盒的Library/Preference中,NSUserDefaults可以存储的数据类型包括:NSData、NSString、NSNumber、NSDate、NSArray、NSDictionary。写入和读取都比较简单,如下:
写入:
NSString *str = [userDefault objectForKey:@"zhigang"];
@interface Person : NSObject NSCoding//遵守NSCoding协议
@property (nonatomic,strong) NSString *name;
@property (nonatomic,assign) NSInteger age;
@end
解档操作:
同样调用NSCoder子类NSKeyedArchiver的方法unarchiveRootObject:toFile: 即可
[NSKeyedUnarchiver unarchiveObjectWithFile:path];
NSMutableData *data = [NSMutableData data];
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc]initForWritingWithMutableData:data];
[archiver encodeObject:person forKey:@"person"];
[archiver encodeObject:bir forKey:@"bir"];
// 存档完毕(一定要调用这个方法)
[archiver finishEncoding];
[data writeToFile:path atomically:YES];
NSData *undata = [NSData dataWithContentsOfFile:path];
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc]initForReadingWithData:data];
[unarchiver decodeObjectForKey:@"person"];
[unarchiver decodeObjectForKey:@"bir"];
// 恢复完毕
[unarchiver finishDecoding];
一般获取本地数据是从plist文件中读取JSON数据。
读取数据:
NSString
*plistPath
=
[[NSBundle
mainBundle]
pathForResource:@"city"
ofType:@"plist"];
NSArrary
*cityArray
=
[[NSArray
alloc]initWithContentsOfFile:plistPath];
这里的cityArray根据你存在plist中的数据类型来确定,如果plist中是字典类型,那么你这里需要使用NSDictionary去存储你从plist中获取到的数据。
至于本地存储数据的话根据你项目的具体功能来设计,一般的小型数据如用户昵称、手机号等使用NSUserDefault即可,但是如果是大量数据如账单类app中的账单数据那么此时需要考虑使用sqlite3去存储数据,至于密码之类就需要使用NSKeydArchiver去存储。
之前项目中在展示用户数据的时候都是先直接从网络获取,然后再展示,之所以这样做而不将用户数据存储到本地再展示的原因是当时考虑到如果用户在其他设备上对该用户的数据进行了修改那么原来设备上用户信息的展示就会出错,还是从网络获取的数据可靠。(存储到本地同样能正确展示用户数据,只怪自己当初没深入思考过这个问题)
先从网络获取用户数据再展示用户数据会有一个问题,由于网路请求数据是需要一定时间的,这样当我打开一个包含用户数据的页面的时候会有片刻时间无法看到用户的数据,尤其在这个页面包含用户头像的时候这个效果(闪屏)更加明显,给用户的体验不是很好。
我们可以在项目中创建一个存储用户信息的类,这个类可以将用户信息存储到本地,在展示用户数据的时候 先从本地去取数据 这样就不会有之前片刻时间看不到用户数据的闪屏效果, 再从网络上获取数据同时将数据存储到本地,再重复从本地取的操作(这样能保证数据是最新的,不会出错) 。
存储用户数据到本地有三个要点需要注意:
这个存储用户数据的类相当于一个中介,在从网络获取到数据时并没有直接去展示用户数据而是先将数据放到了中介中,在展示用户数据的时候再去这个存储了用户数据的中介中去取数据。
本篇文章到这里就结束了,愿大家加班不多工资多,男同胞都有女朋友,女同胞都有男朋友。????
plist方式保存数据
plist可以保存的类型为数组与字典.
在介绍plist文件保存之前,先介绍几个方法。
Preferences方式保存数据
相比plist方式保存数据来说,Preferences方式的优势在于:1.不需要关心文件名.
2.快速的键值对存取.
Preferences 与 application 一样,是一个单例.