iOS开发 数据持久化-归档
来源:互联网 发布:网络彩票平台代理招聘 编辑:程序博客网 时间:2024/05/16 08:46
在iOS开发过程中,很多时候都需要进行一些数据的储存和读入,在数据量不大的情况下,使用plist储存数据是一种很方便的方式,但是plist只能允许储存一些系统自带的数据类型,如果需要储存自定义的数据类型,plist是是用不了的,但是可以使用另外一种数据持久化的方法-对象归档。
NSCoding协议
要想使用对象归档,需要归档的对象就要实现NSCoding协议,实现NSCoding协议需要实现它的两个方法:
- (void)encodeWithCoder:(NSCoder *)aCoder;//写入数据- (id)initWithCoder:(NSCoder *)aDecoder;//读取数据我们可以将对象的属性写入NSCoder对象中,也可以从其中读取写入的数据,NSCoder中包含了许多方法,其中:
- (void)encodeObject:(id)objv forKey:(NSString *)key;- (void)encodeBool:(BOOL)boolv forKey:(NSString *)key;- (void)encodeInt:(int)intv forKey:(NSString *)key;- (void)encodeInt32:(int32_t)intv forKey:(NSString *)key;- (void)encodeInt64:(int64_t)intv forKey:(NSString *)key;- (void)encodeFloat:(float)realv forKey:(NSString *)key;- (void)encodeDouble:(double)realv forKey:(NSString *)key;可以将各种类型的对象写入到NSCoder对象中,并将其与key关联起来,而:
- (id)decodeObjectForKey:(NSString *)key;- (BOOL)decodeBoolForKey:(NSString *)key;- (int)decodeIntForKey:(NSString *)key;- (int32_t)decodeInt32ForKey:(NSString *)key;- (int64_t)decodeInt64ForKey:(NSString *)key;- (float)decodeFloatForKey:(NSString *)key;- (double)decodeDoubleForKey:(NSString *)key;则可以将NSCoder中的对象使用key读取出来。
对象归档
而归档对象,需要使用
[NSKeyedArchiver archiveRootObject:object toFile:path];
将object对象归档到path文件中。逆归档则需要使用
[NSKeyedUnarchiver unarchiveObjectWithFile:path];将path文件中的对象读取出来。
基本的对象归档流程就是这样,之后是我的一个示例:
//StudentModel.h#import <Foundation/Foundation.h>@interface StudentModel : NSObject <NSCoding>@property (nonatomic, strong) NSString* name;@property (nonatomic, strong) NSString* stuID;@property (nonatomic, assign) NSInteger age;@end
//StudentModel.m#import "StudentModel.h"@implementation StudentModel#pragma mark -- NSCoding- (instancetype)initWithCoder:(NSCoder *)aDecoder{ self = [super init]; if (self) { self.name = [aDecoder decodeObjectForKey:@"name"]; self.stuID = [aDecoder decodeObjectForKey:@"stuID"]; self.age = [aDecoder decodeIntegerForKey:@"age"]; } return self;}- (void)encodeWithCoder:(NSCoder *)aCoder{ [aCoder encodeObject:self.name forKey:@"name"]; [aCoder encodeObject:self.stuID forKey:@"stuID"]; [aCoder encodeInteger:self.age forKey:@"age"];}@end
//ViewController.m#import "ViewController.h"#import "StudentModel.h"@interface ViewController (){ StudentModel* _myStudent; StudentModel* _myStudent1; NSString* _path;}@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. NSString *Path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; _path = [Path stringByAppendingPathComponent:@"test"]; _myStudent = [[StudentModel alloc] init]; _myStudent.name = @"小明"; _myStudent.stuID = @"20121001047"; _myStudent.age = 21; [self archivedStudent];}#pragma mark -- response- (IBAction)touchUnarchiveBtn:(id)sender { [self unarchivedStudent];}#pragma mark -- method- (void)archivedStudent{ [NSKeyedArchiver archiveRootObject:_myStudent toFile:_path];}- (void)unarchivedStudent{ _myStudent1 = [NSKeyedUnarchiver unarchiveObjectWithFile:_path]; NSLog(@"name:%@", _myStudent1.name); NSLog(@"studentID:%@", _myStudent1.stuID); NSLog(@"age:%d", (int)_myStudent1.age);}@end附上打印结果:
2015-07-26 09:04:06.163 NSCodingTest[7679:7139551] name:小明2015-07-26 09:04:06.164 NSCodingTest[7679:7139551] studentID:201210010472015-07-26 09:04:06.165 NSCodingTest[7679:7139551] age:21
0 0
- iOS开发 数据持久化-归档
- iOS开发之数据持久化-归档
- iOS 归档持久化数据
- iOS数据持久化 归档
- IOS数据持久化--归档
- IOS开发-数据持久化(一)【文本文件+二进制归档】
- iOS开发之数据持久化 --NSKeydeArchiver归档
- iOS开发-数据持久化 :沙盒,归档反归档,NSFileManager文件管理器(单例)
- iOS 数据持久化二-对象归档
- iOS 数据持久化二-对象归档
- iOS数据持久化之归档
- iOS 数据持久化-归档
- IOS数据持久化之对象归档
- IOS数据持久化之归档NSKeyedArchiver
- iOS数据持久化之归档
- iOS数据持久化之NSKeyedArchiver(归档)
- iOS数据持久化-归档NSKeyedArchiver
- iOS数据持久化之归档NSKeyedArchiver
- 双端队列的应用
- PHP中的include和require
- Stange氧探头在S7-400模拟量处理
- 巴菲特认为每个人都该读的9本书
- hdu 2487 Ugly Windows
- iOS开发 数据持久化-归档
- Docker学习1 - CentOS7安装docker
- SERDES总结
- 暴力求解法之枚举子集
- UVa 10168 Summation of Four Primes
- Python - 多次检查后缀名(endwith)
- 自定义等高cell和不等高cell的方式对比
- 使用 autoruns.exe 来查看自动启动的程序
- ImageEffects