利用NSKeyedUnarchiver简单的数据存储
来源:互联网 发布:周易古代注本知乎 编辑:程序博客网 时间:2024/06/05 11:04
NSUserDefaults和plist保存数据再本地时,都不能保存model,只能保存一些基本的数据类型,如果想要保存model的话,我们一般会想到使用NSKeyedUnarchiver来保存。
第一步,创建我们的model
#import <Foundation/Foundation.h>
@interface Account : NSObject
@property (nonatomic,copy) NSString *phone;//手机号
@property (nonatomic,copy) NSString *uid;//用户id
@property (nonatomic,copy) NSString *nickname;
@property (nonatomic,copy) NSString *password;
@property (nonatomic,copy) NSString *tel;//座机
@property (nonatomic,copy) NSString *last_login;
//@property (nonatomic, copy) NSString *new_phone;
@property (nonatomic,copy) NSString *uthumb;//头像地址
@property (nonatomic,copy) NSString *province;
@property (nonatomic,copy) NSString *city;
@property (nonatomic,copy) NSString *area;
@property (nonatomic,copy) NSData *photoData;
@end
#import "Account.h"
@implementation Account
+ (NSDictionary *)replacedKeyFromPropertyName
{
return@{@"uid":@"id"};
}
#pragma mark 归档的时候调用
MJCodingImplementation
@end
创建我们的单例的简写模式(.h文件)// .h
#define single_interface(class) + (class *)shared##class;
// \ 代表下一行也属于宏
// ## 是分隔符
#define single_implementation(class) \
static class *_instance; \
\
+ (class *)shared##class \
{ \
if (_instance == nil) { \
_instance = [[self alloc] init]; \
} \
return _instance; \
} \
\
+ (id)allocWithZone:(NSZone *)zone \
{ \
static dispatch_once_t onceToken; \
dispatch_once(&onceToken, ^{ \
_instance = [super allocWithZone:zone]; \
}); \
return _instance; \
}
// AccountTool.h
//
#import <Foundation/Foundation.h>
#import "Account.h"
#import "SingleTon.h"
@interface AccountTool : NSObject
single_interface(AccountTool)
- (void)saveAccount:(Account *)account;
- (void)removeAccount;
// 获得当前账号
@property (nonatomic,readonly) Account *account;
@end
//
// AccountTool.m
//
#import "AccountTool.h"
// 文件路径---->>获取分类的沙盒文件路径
#define kFile [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0] stringByAppendingPathComponent:@"account.data"]
@implementation AccountTool
single_implementation(AccountTool)
- (instancetype)init
{
if (self = [superinit]) {
//解归档该路径下的文件
_account = [NSKeyedUnarchiverunarchiveObjectWithFile:kFile];
}
returnself;
}
- (void)saveAccount:(Account *)account
{
_account = account;
//将数据归档,如果前面的文件不存在,就会在归档数据时创建
[NSKeyedArchiverarchiveRootObject:accounttoFile:kFile];
}
- (void)removeAccount
{
if ([[NSFileManagerdefaultManager] fileExistsAtPath:kFile]) {
[[NSFileManagerdefaultManager]removeItemAtPath:kFileerror:nil];
}
}
@end
//如何使用工具类呢?????
if ([AccountToolsharedAccountTool].account.uid ==nil || ! kUserLogin || [[AccountToolsharedAccountTool].account.uidisKindOfClass:[NSNullclass]]){
//本地未找到数据
}else {
//本地找到数据了
}
//登录后将数据保存到本地
//保存用户信息,利用mj工具类,将数据保存到model中,这里也可以使用其他的工具类,比如jsonmodel
Account *currentAccount = [Accountmj_objectWithKeyValues:userInfo];
[[AccountToolsharedAccountTool] saveAccount:currentAccount];
//更新数据
//保存用户头像
Account *currentAccout = [AccountToolsharedAccountTool].account;
currentAccout.uthumb = responseObj[@"data"][@"uthumb"];
currentAccount.nickname = value;
[[AccountToolsharedAccountTool]saveAccount:currentAccout];
当然,我们也可以使用NSUserDefaults将数据一条一条的保存起来,但是这样的操作比较多,没有我们的这个工具类更加直观,容易使用。
- 利用NSKeyedUnarchiver简单的数据存储
- 利用NSKeyedUnarchiver对象归档方式保存数据
- iOS学习笔记3—NSKeyedUnarchiver进行本地数据的读取|存储
- 实现 简单 的文件 储存--NSKeyedUnarchiver
- ios开发:NSKeyedUnarchiver,数据序列化,本地存储
- ios数据存储之--对模型对象归档(NSKeyedArchiver、NSKeyedUnarchiver)
- ios开发:NSKeyedUnarchiver,数据序列化,本地存储
- ios数据存储之--对模型对象归档(NSKeyedArchiver、NSKeyedUnarchiver)
- ios数据存储之--对模型对象归档(NSKeyedArchiver、NSKeyedUnarchiver)
- ios数据存储之--模型对象归档(NSKeyedArchiver、NSKeyedUnarchiver)
- Android 数据存储 利用SQLiteDatabase实现简单的学生管理
- Android 数据存储 利用SQLiteDatabase实现简单的学生管理
- Android 数据存储 利用SQLiteDatabase实现简单的学生管理
- NSKeyedUnarchiver数据归档(很巴适)
- iOS开发-进阶:数据存储之-对模型对象归档(NSKeyedArchiver、NSKeyedUnarchiver)
- NSKeyedUnarchiver
- iOS_简单的数据存储
- NSUserDefaults简单的数据存储
- 设计模式之享元模式
- Android手机组件调用方法
- jw player解决网页播放mp4文件的问题
- 在w3cschool学完html,css,javascript,jquery以后,还是不会做前端怎么办?
- Linux下进程间通信之信号量
- 利用NSKeyedUnarchiver简单的数据存储
- B2C数据流向
- c++如何设置托盘图标并闪烁
- 如何为Apache JMeter开发插件(四)——几种类型的Sampler
- innerHTML,innerText,outerHTML用法及区别
- IOS TableView的Cell高度自适应,UILabel自动换行适应(转载)
- 摄像头图像桶形畸变校正测试
- AAC帧格式及编码介绍
- Matrix4x4类