//
// ViewController.m
// IOS_0113_本地存储
//
// Created by ma c on 16/1/13.
// Copyright (c) 2016年 博文科技. All rights reserved.
// #import "ViewController.h"
#import "BWLoginDataModel.h"
#import "BWSecondViewController.h" @interface ViewController () @end @implementation ViewController
/*
数据本地化(数据持久化)- 本地存储
1.NSUserDefault属性列表存储 - 轻量级数据,存储类型有限
2.归档 - 大量数据,存储类型可以扩展到自定义对象
3.本地数据库 不管是属性列表还是归档,都是将数据保存到后台,前端任意一个界面都能访问
*/ - (void)viewDidLoad {
[super viewDidLoad];
/*
归档 - 本地化数据模型
<NSCoding> - 要对哪个类的对象进行归档,就让哪个类实现这个协议
*/
self.view.backgroundColor = [UIColor groupTableViewBackgroundColor];
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(changeView)];
[self.view addGestureRecognizer:tap]; BWLoginDataModel *loginModel = [[BWLoginDataModel alloc] init];
loginModel.name = @"";
loginModel.password = @""; //沙盒路径 - 每一个应用都有自己的沙盒,IOS机制
NSString *filePath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[] stringByAppendingPathComponent:@"account.data"];
//NSLog(@"%@",filePath); //将一个归档对象归档到目录下
if ([NSKeyedArchiver archiveRootObject:loginModel toFile:filePath]) {
NSLog(@"归档成功");
}
else
NSLog(@"归档失败"); } - (void)changeView
{
BWSecondViewController *secondVC = [[BWSecondViewController alloc] init]; [self presentViewController:secondVC animated:YES completion:nil];
} #pragma mark - 属性列表基础
- (void)useUserDefault
{
/*
//属性列表NSUserDefault(全局唯一,不用创建) 某些数据当存储本地之后,下次再次调用的时候,不用再次重新赋值,而是从本地直接获取
如果没有必要,别向属性列表存储大量数据
一般用来存储简单的全局都能使用到的数据
e.g. DeviceToken 设备令牌
SessionID 安全口令
ps:属性列表的存储和读取速度都是及时的,而归档和数据库都是有存储延时的
pss:自动登录
把用户的账号,密码存储到属性列表中 */
// NSString *str = @"bowen";
// [[NSUserDefaults standardUserDefaults] setObject:str forKey:@"sister"];
// NSString *newStr = [[NSUserDefaults standardUserDefaults] objectForKey:@"sister"];
// NSLog(@"%@",newStr);
// NSLog(@"%@",[[NSUserDefaults standardUserDefaults] dictionaryRepresentation]); //注意别删除错了
//[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"sister"];
//NSLog(@"%@",newStr); } - (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
} @end
 //
// BWSecondViewController.m
// IOS_0113_本地存储
//
// Created by ma c on 16/1/13.
// Copyright (c) 2016年 博文科技. All rights reserved.
// #import "BWSecondViewController.h"
#import "BWLoginDataModel.h" @interface BWSecondViewController () @end @implementation BWSecondViewController - (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor cyanColor]; //解档
NSString *filePath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[] stringByAppendingPathComponent:@"account.data"];
BWLoginDataModel *dataModel = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath];
NSLog(@"%@",dataModel);
} - (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
} @end
 //
// BWLoginDataModel.h
// IOS_0113_本地存储
//
// Created by ma c on 16/1/13.
// Copyright (c) 2016年 博文科技. All rights reserved.
// #import <Foundation/Foundation.h> @interface BWLoginDataModel : NSObject<NSCoding> @property (nonatomic, copy) NSString *name;
@property (nonatomic, copy) NSString *password; @end //
// BWLoginDataModel.m
// IOS_0113_本地存储
//
// Created by ma c on 16/1/13.
// Copyright (c) 2016年 博文科技. All rights reserved.
// #import "BWLoginDataModel.h" @implementation BWLoginDataModel - (NSString *)description
{
return [NSString stringWithFormat:@"name:%@ password:%@", self.name,self.password];
} #pragma mark - 归档方法
- (void)encodeWithCoder:(NSCoder *)aCoder
{
//按照规定的Key对属性进行编码操作
[aCoder encodeObject:self.name forKey:@"name"];
[aCoder encodeObject:self.password forKey:@"password"]; }
#pragma mark - 解档方法
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super init];
if (self) {
//归档和解档的key可以随意写,但他们属性对应的key必须相同
_name = [aDecoder decodeObjectForKey:@"name"];
_password = [aDecoder decodeObjectForKey:@"password"];
}
return self;
} @end

OC 数据持久化(数据本地化)- 本地存储的更多相关文章

  1. IOS开发--数据持久化篇之文件存储(一)

    前言:个人觉得开发人员最大的悲哀莫过于懂得使用却不明白其中的原理.在代码之前我觉得还是有必要简单阐述下相关的一些知识点. 因为文章或深或浅总有适合的人群.若有朋友发现了其中不正确的观点还望多多指出,不 ...

  2. RAC环境下误操作将数据文件添加到本地存储

    今天碰到个有意思的事情,有客户在Oracle RAC环境,误操作将新增的数据文件直接创建到了其中一个节点的本地存储上. 发现网上去搜的话这种问题还真不少,对应解决方案也各式各样,客户问我选择哪种方案可 ...

  3. vuex如何实现数据持久化,刷新页面存储的值还存在

    1.安装: npm install vuex-persistedstate --save 2.找到store/index.js import Vue from 'vue' import Vuex fr ...

  4. VueX数据持久化

    解决:Vue刷新时获取不到数据 解决方案:1.本地存储 2.Vuex数据持久化工具插件 本地存储 import Vue from "vue"; import Vuex from & ...

  5. React Native 之 数据持久化

    前言 因为 实战项目系列 涉及到数据持久化,这边就来补充一下. 如本文有错或理解偏差欢迎联系我,会尽快改正更新! 如有什么问题,也可直接通过邮箱 277511806@qq.com 联系我. demo链 ...

  6. scrapy 学习笔记2 数据持久化

    前情提要:校花网爬取,并进行数据持久化 数据持久化操作 --编码流程: 1:数据解析 2:封装item 类 3: 将解析的数据存储到实例化好的item 对象中 4:提交item 5:管道接收item然 ...

  7. React-Native 之 GD (十三)数据持久化(realm) 及 公共Cell

    1.数据持久化 数据持久化是移动端的一个重要部分,刚发现 Realm 原来已经支持 React-Native 了 步骤一: 引入 realm $ npm install realm --save 步骤 ...

  8. Spring Cloud Alibaba基础教程:Nacos的数据持久化

    前情回顾: <Spring Cloud Alibaba基础教程:使用Nacos实现服务注册与发现> <Spring Cloud Alibaba基础教程:支持的几种服务消费方式> ...

  9. IOS数据持久化之归档NSKeyedArchiver, NSUserDefaults,writeToFile

    //2.文件读写 //支持:NSString, NSArray , NSDictionay, NSData //注:集合(NSArray, NSDictionay)中得元素也必须是这四种类型, 才能够 ...

  10. redis启动加载过程、数据持久化

    背景 公司一年的部分业务数据放在redis服务器上,但数据量比较大,单纯的string类型数据一年就将近32G,而且是经过压缩后的. 所以我在想能否通过获取string数据的时间改为保存list数据类 ...

随机推荐

  1. Python开发【数据结构】:基础

    数据结构 什么是数据结构? 简单来说,数据结构就是设计数据以何种方式组织并存储在计算机中. 比如:列表.集合与字典等都是一种数据结构 N.Wirth: “程序=数据结构+算法” 列表 列表:在其他编程 ...

  2. MVC4中使用Html.DropDownList实现级联

    本文记录了一个在MVC4中使用PartialView实现级联效果的小例子. 准备工作 首先准备一下要级联的数据,新建两个类:Province和City public class Province { ...

  3. mysql 数据操作 多表查询 子查询 带EXISTS关键字的子查询

    带EXISTS关键字的子查询 EXISTS关字键字表示存在. EXISTS 判断某个sql语句的有没有查到结果 有就返回真  true 否则返回假 False 如果条件成立 返回另外一条sql语句的返 ...

  4. nodejs Async详解之二:工具类

    Async中提供了几个工具类,给我们提供一些小便利: memoize unmemoize log dir noConflict 1. memoize(fn, [hasher]) 有一些方法比较耗时,且 ...

  5. tar 压缩解压命令详解

    tar -c: 建立压缩档案-x:解压-t:查看内容-r:向压缩归档文件末尾追加文件-u:更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个.下面的 ...

  6. java操作Word总结

    import com.jacob.activeX.ActiveXComponent; import com.jacob.com.Dispatch; import com.jacob.com.Varia ...

  7. [LeetCode]160.Intersection of Two Linked Lists(2个链表的公共节点)

    Intersection of Two Linked Lists Write a program to find the node at which the intersection of two s ...

  8. Good Bye 2018 Solution

    A. New Year and the Christmas Ornament 签到. #include <bits/stdc++.h> using namespace std; int a ...

  9. 如何有规律的备份 WordPress 博客(转)

    转自:http://blog.wpjam.com/m/backup-your-blog-regularly/   我们都知道备份 WordPress 博客应该是规律性的操作,但是事实上往往我们都会因为 ...

  10. Python面试题目之列表去重并维持原来顺序

    题目: 列表去掉重复元素,并保持原来的排序 方法一: # 待处理的列表 L1 = [111,44,55,33,22,11] # 利用集合set的属性,去重 s1 = set(L1) # 把集合转化为列 ...