iOS数据存储之---归档
来源:互联网 发布:知肤泉水光面膜说明书 编辑:程序博客网 时间:2024/04/29 15:47
归档是利用属性列表的原理来实现的,有系统默认的NSUserDefalts类实现对Object-c2.0中基础类对象实现归档,如果要对自定义的对象进行归档,则该自定义对象还要实现NSCoding协议。
归档是按照键-值对的形式存储于一个文件当中。系统默认的NSUserDefaults类存储在Library目录下,但是只能对object-c中定义的数据类型NSNumber,NSArray,NSDictionary,NSSet,NSDate,NSString归档和解归档。
对于自定义的对象,必须实现协议NSCoding的两个方法:// --解档的方法
- (id)initWithCoder:(NSCoder *)decoder{
}
// --归档的方法
- (void)encodeWithCoder:(NSCoder *)encoder
}
在这两个方法中分别使用NSCoder类中的编码方法和解码方法对自定义对象进行编码和解码,然后使用如下方法归档和解归档
// --使用NSKeyedArchiver类方法归档
archiveRootObject:toFile:
// --使用NSKeyedUnarchiver类解归档
unarchiveObjectWithFile:
注:对于NSKeyedArchiver类,一个文件中只能归档一个自定义对象和Object-c中的对象。对于NSUserDefaults其实也是一样,它相当于是归档了一个字典NSDictionary
/**
@ NSUserdefaults举例
*/// --存储数据
-(void)forNSUserDefaults{
NSString *strOne=@"Persistent data1";}
NSString *strTwo=@"Persistent data2";
NSMutableArray *persistentArray=[[NSMutableArray alloc] init];
[persistentArray addObject:strOne];
[persistentArray addObject:strTwo];
NSUserDefaults *persistentDefaults=[NSUserDefaults standardUserDefaults];
[persistentDefaults setObject:persistentArray forKey:@"myDefault"];
NSString *descriptionDefault=[persistentDefaults description];
NSLog(@"NSUserDefaults description is %@",descriptionDefault);
// ---取数据
-(void)forUnNSUserDefaults{
NSUserDefaults *persistentDefaults=[NSUserDefaults standardUserDefaults];}
NSArray *unPersistentArray=[persistentDefaults objectForKey:@"myDefault"];
NSString *unStrOne=[unPersistentArray objectAtIndex:0];
NSString *unStrTwo=[unPersistentArray objectAtIndex:1];
NSLog(@"unStrOne= %@,unStrTwo= %@",unStrOne,unStrTwo);
/**
@ NSKeyedArchiver和NSKeyedUnarchiver举例
*/
typedef enum{
AccountTypeLecturer ,}AccountType;
AccountTypeAgency
@interface Account : NSObject<NSCoding>
@property (nonatomic, copy) NSString *phoneNumber;- (id)initWithDict:(NSDictionary *)dict;
@property (nonatomic, copy) NSString *password;
@property (nonatomic,copy) NSString * lId;
@property (nonatomic,copy) NSString *name;
@property (nonatomic,copy) NSString *avatarUrl;
@property (nonatomic,copy) NSString *authStatus;
@property (nonatomic,copy) NSString *licencePicPath;
@property (nonatomic,copy) NSString *logoPicPath;
@property (nonatomic,copy) NSString *orgCodePicPath;
@property (nonatomic, assign) AccountType accountType;
@end
#import "Account.h"
#define kPhoneNumber @"LoginPhoneNumber"
#define kPassword @"LoginPassword"
#define kId @"lid"
#define kName @"name"
#define kAvatarUrl @"avaterUrl"
#define kAccountType @"accountType"
#define kAuthStatus @"authStatus"
@implementation Account
- (id)initWithDict:(NSDictionary *)dict{if (self = [super init]) {return self;self.name = dict[@"name"];self.avatarUrl = dict[@"avatar"];self.lId= [NSString stringWithFormat:@"%@",dict[@"id"]];self.authStatus = dict[@"authStatus"];self.licencePicPath = dict[@"licencePicPath"];self.logoPicPath = dict[@"logoPicPath"];self.orgCodePicPath = dict[@"orgCodePicPath"];}
}
- (id)initWithCoder:(NSCoder *)decoder{if (self = [super init]) {
self.phoneNumber = [decoder decodeObjectForKey:kPhoneNumber];self.password = [decoder decodeObjectForKey:kPassword];self.accountType = [[decoder decodeObjectForKey:kAccountType] intValue];self.lId = [decoder decodeObjectForKey:kId];self.avatarUrl = [decoder decodeObjectForKey:kAvatarUrl];self.name = [decoder decodeObjectForKey:kName];self.authStatus = [decoder decodeObjectForKey:kAuthStatus];
}
return self;}
- (void)encodeWithCoder:(NSCoder *)encoder{
[encoder encodeObject:self.phoneNumber forKey:kPhoneNumber];}
[encoder encodeObject:self.password forKey:kPassword];
[encoder encodeObject:[NSNumber numberWithInt:self.accountType] forKey:kAccountType];
[encoder encodeObject:self.lId forKey:kId];
[encoder encodeObject:self.avatarUrl forKey:kAvatarUrl];
[encoder encodeObject:self.name forKey:kName];
[encoder encodeObject:self.authStatus forKey:kAuthStatus];
@end
#define kFilePath [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0] stringByAppendingPathComponent:kFileName]
#define kCurrentPath [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0] stringByAppendingPathComponent:kCurrentName]
[NSKeyedArchiver archiveRootObject:accountList toFile:kFilePath];
//先将多个自定义对象存储到一个数组中,然后将该数组归档到另一个文件中达到在一个文件中存储多个自定义对象的目的
Account *currentAccount = [NSKeyedUnarchiver unarchiveObjectWithFile:kCurrentPath];
NSMutableArray *accountList = [NSKeyedUnarchiver unarchiveObjectWithFile:kCurrentPath];
0 0
- iOS数据存储之---归档
- ios数据存储之归档
- iOS归档存储数据
- 数据存储之归档
- IOS学习之ios应用数据存储方式(归档)
- ios数据存储之--对模型对象归档(NSKeyedArchiver、NSKeyedUnarchiver)
- ios数据存储之--对模型对象归档(NSKeyedArchiver、NSKeyedUnarchiver)
- iOS 数据的存储和读取之归档
- ios数据存储之--对模型对象归档(NSKeyedArchiver、NSKeyedUnarchiver)
- ios数据存储之--模型对象归档(NSKeyedArchiver、NSKeyedUnarchiver)
- 数据存储之归档和反归档
- iOS存储方式之归档
- iOS基础——数据存储之沙盒机制、Plist、Perference、归档、反归档
- ios 沙盒 NSCoding 归档 数据存储
- iOS 数据的本地存储-对象归档
- ios应用数据存储方式(归档)
- 归档—ios应用数据存储方式
- ios应用数据存储方式(归档)
- 基于power supply信息传递的uevent机制
- iOS 本地缓存实现 方案借鉴
- session详解
- 自己写类似于Jsp页面引用的tag
- Spring五个事务隔离级别和七个事务传播行为
- iOS数据存储之---归档
- httpfs安装指南
- StringBuilder的简单用法
- 以考代评职称的新诱惑
- android插件化-apkplug插件开发-07
- Sublime 安装 Package Control
- 信息学习3
- Graphlab并行集群安装教程
- php方法注释示例