数据存储简单了解(NSUserDefaults)
数据存储-使用NSUserDefaults
两个类介绍:
NSUserDefaults适合存储轻量级的本地数据,比如要保存一个登陆界面的数据,用户名、密码之类的,个人觉得使用NSUserDefaults是首选。因为如果使用自己建立的plist文件什么的,还得自己显示创建文件,读取文件,很麻烦,而是用NSUserDefaults则不用管这些东西,就像读字符串一样,直接读取就可以了。
NSUserDefaults支持的数据格式有:NSNumber(Integer、Float、Double),NSString,NSDate,NSArray,NSDictionary,BOOL类型
NSKeyedUnarchiver类用于从文件(或者NSData指针)反归档模型。使用NSKeyedUnarchiver类来对数据进行归档和反归档。
一些函数介绍:
[NSKeyedUnarchiver unarchiveObjectWithData:data]//解码数据
[NSKeyedArchiver archivedDataWithRootObject:testObject];//编码数据 [[NSUserDefaults standardUserDefaults] objectForKey:key];//提取数据
[[NSUserDefaults standardUserDefaults] removeObjectForKey:key];删除数据
[[NSUserDefaults standardUserDefaults] setObject:data forKey:key];//储存数据
[dic writeToFile:plistPath atomically:YES]//将数据保存到文件
[NSDictionary dictionaryWithContentsOfFile:plistPath];//从文件中提取数据
用例子具体讲解数据存储
创建一个自定义类,并将这个类中的数据用NSUserDefault存放起来
让这个自定义类实现<NSCoding>协议中的- (id) initWithCoder: (NSCoder *)coder方法和- (void) encodeWithCoder: (NSCoder *)coder方法,然后把该自定义的类对象编码到NSData中(使用NSKeyedUnarchiver归档),再从NSUserDefaults中进行读取。
函数介绍:
encodeWithCoder:
//每次归档对象时,都会调用这个方法。一般在这个方法里面指定如何归档对象中的每个实例变量,可以使用encodeObject:forKey方法归档实例变量。 initWithCoder:
//每次从文件中恢复(解码)对象时,都会调用这个方法。一般在这个方法里面指定如何解码文件中的数据为对象的实例变量,可以使用encodeObject:forKey:方法解码实例变量。
代码如下:
自定义类编写代码:
#import <Foundation/Foundation.h> @interface cardTest : NSObject @property (nonatomic, assign) int testInt;
@property (nonatomic, strong) NSArray *testArray; @end
#import "cardTest.h" @interface cardTest ()<NSCoding> @end @implementation cardTest //解码函数
-(id) initWithCoder:(NSCoder *)aDecoder
{
self = [super init];
if (self) {
self.testArray = [aDecoder decodeObjectForKey:@"testArray"];
self.testInt = [aDecoder decodeIntForKey:@"testInt"];
}
return self;
} //编码函数
-(void) encodeWithCoder:(NSCoder *)aCoder
{
[aCoder encodeObject:self.testArray forKey:@"testArray"];
[aCoder encodeInt:self.testInt forKey:@"testInt"];
}
@end
储存类中的代码:
储存操作在- (void)viewDidLoad函数中进行
#import <UIKit/UIKit.h> @interface ViewController : UIViewController @end
#import "ViewController.h"
#import "cardTest.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib. // 初始化
cardTest *testObject = [[cardTest alloc] init];
testObject.testInt = 8;
testObject.testArray = [NSArray arrayWithObjects:@"dslajjfds", @"aslkdfjasksdkfjasl", nil]; // 压缩数据
NSData *date = [NSKeyedArchiver archivedDataWithRootObject:testObject]; // 用NSUserDefaults储存数据
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
[ud setObject:date forKey:@"cardTest_date"]; NSData *newdate;
cardTest *testObjectnew = [[cardTest alloc] init]; // 用NSUserDefaults获取数据
newdate = [ud objectForKey:@"cardTest_date"];
// 解压数据
testObjectnew= [NSKeyedUnarchiver unarchiveObjectWithData:newdate]; // 输出结果
NSLog(@"%d", testObjectnew.testInt);
NSLog(@"testArray = %@", testObjectnew.testArray); } @end
数据存储简单了解(NSUserDefaults)的更多相关文章
- iOS中的数据存储方式_Preference(NSUserDefaults)
NSUserDefaults适合存储轻量级的本地数据,项目中,我会把一些简单的数据密码.网址.登陆状态BOOL.整型/浮点型数据等和用户有关的数据用它存储.但是它不能存储自定义的对象! 实例化一个 N ...
- IOS中的数据存储 简单总结
1. NSKeyedArchiver(加密形式) 2. plist 3. NSUserDefaults 4. writeToFile 5. SQLite3 ==== N ...
- iOS开发 - OC - 实现本地数据存储的几种方式一
iOS常用的存储方式介绍 在iOS App开发过程中经常需要操作一些需要持续性保留的数据,比如用户对于App的相关设置.需要在本地缓存的数据等等.本文针对OC中经常使用的一下存储方式做了个整理. 常用 ...
- iOS全埋点解决方案-数据存储
前言 SDK 需要把事件数据缓冲到本地,待符合一定策略再去同步数据. 一.数据存储策略 在 iOS 应用程序中,从 "数据缓冲在哪里" 这个纬度看,缓冲一般分两种类型. 内 ...
- IOS数据存储之NSUserDefaults
前言: 作为从事Android开发人来说一定听说过SharedPreferences,然后要成为一名ios开发工程师来说咋能不知道NSUserDefaults!接下来让我们认识一下. NSUserDe ...
- IOS中NSUserDefaults的用法(轻量级本地数据存储)
NSUserDefaults适合存储轻量级的本地数据,比如要保存一个登陆界面的数据,用户名.密码之类的,个人觉得使用NSUserDefaults是首选.下次再登陆的时候就可以直接从NSUserDefa ...
- NSUserDefaults(数据存储)
NSUserDefaults(数据存储) NSUserDefaults适合存储轻量级的本地数据,比如要保存一个登陆界面的数据,用户名.密码之类的,个人觉得使用NSUserDefaults是首选.下 ...
- iOS - OC NSUserDefaults 数据存储
前言 @interface NSUserDefaults : NSObject 用来保存应用程序设置和属性.用户保存的数据.用户再次打开程序或开机后这些数据仍然存在.如果往 userDefaults ...
- iOS - Swift NSUserDefaults 数据存储
前言 public class NSUserDefaults : NSObject 用来保存应用程序设置和属性.用户保存的数据.用户再次打开程序或开机后这些数据仍然存在.如果往 userDefault ...
随机推荐
- JQuery解析XML数据的几个例子
用JavaScript解析XML数据是常见的编程任务,JavaScript能做的,JQuery当然也能做.下面我们来总结几个使用JQuery解析XML的例子. 第一种方案: <script ty ...
- Python自动化运维之28、Django(二)
一.FORM 1.概述 django表单系统中,所有的表单类都作为django.forms.Form的子类创建,包括ModelForm 关于django的表单系统,主要分两种 基于django.for ...
- 获取工程的exe文件的所在目录
Assembly.GetExecutingAssembly().ManifestModule.FullyQualifiedName; 例如结果为: C:\Documents and ...
- ASP.NET MVC轻教程 Step By Step 3 ——使用ViewBag
在上一节我们创建了与Index动作方法对应的Index视图,那么Index动作方法该如何向Index视图传送数据呢?其中一个方法是使用ViewBag(视图包).让我们试试看. 在Index动作方法中添 ...
- BZOJ 1503 郁闷的出纳员
Description OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常 ...
- Polyfills
填充物..github上比较全的列表 IE总是有填不完的坑,在此总结一下,可能暂时都是一知半解,错了我会慢慢改的. 首先html5标签需要填充一些class,可以用html5.js处理,或者html5 ...
- Struts2的注解功能
我们知道通常情况下,Struts2是通过struts.xml配置的.但是随着系统规模的加大我们需要配置的文件会比较大,虽然我们可以根据不同的系统功能将不同模块的配置文件单独书写,然后通过<inc ...
- 【转】 java中HashMap详解
原文网址:http://blog.csdn.net/caihaijiang/article/details/6280251 java中HashMap详解 HashMap 和 HashSet 是 Jav ...
- (转载)PHP去掉转义后字符串中的反斜杠\函数stripslashes
(转载)http://www.beijibear.com/index.php?aid=182 addslashes()函数主要是在字符串中添加反斜杠对特殊字符进行转义,stripslashes()则是 ...
- 【宽搜】Vijos P1360 八数码问题
题目链接: https://vijos.org/p/1360 题目大意: 3x3格子上放1~8数字,一个空位,每次空位可与上下左右交换,固定终止布局,求输入的起始布局需要几步到达终止布局 题目思路: ...