iOS开发之归档
来源:互联网 发布:淘宝英文店铺名字大全 编辑:程序博客网 时间:2024/04/29 10:03
iOS开发中,我们可能需要将一些内存中的数据存储到本地中,以便下次进入程序的时候使用,这个时候我们就需要归档,其实,就是将一些对象进行编码保存到磁盘中,然后再使用的时候再对这些数据进行解码,然后使用。涉及到的类为NSKeyedArchiver和NSKeyedUnarchiver。下面我们来看一个例子,例如我们从服务器上取到了一些xml数据,然后经过解析之后,我们可能想要把解析出来的数据保存到硬盘中,这个时候,我们就得创建一个相对应的实体类来保存数据,这时候这个类就需要遵循NSCoding协议,并实现协议中的两个方法:
- (void)encodeWithCoder:(NSCoder *)aCoder;
- (id)initWithCoder:(NSCoder *)aDecoder;
#import<Foundation/Foundation.h>
@interface Info :NSObject<NSCoding>{
NSString *infoID;
NSString *infoName;
NSString *infoImage;
NSString *infoArtist;
}
@property(nonatomic,copy)NSString *infoID;
@property(nonatomic,copy)NSString *infoName;
@property(nonatomic,copy)NSString *infoImage;
@property(nonatomic,copy)NSString *infoArtist;
@end
#import"Info.h"
@implementation Info
@synthesize infoID,infoName,infoImage,infoArtist;
-(void)encodeWithCoder:(NSCoder *)aCoder{
[aCoderencodeObject:infoIDforKey:@"infoID"];
[aCoderencodeObject:infoNameforKey:@"infoName"];
[aCoderencodeObject:infoImageforKey:@"infoImage"];
[aCoderencodeObject:infoArtistforKey:@"infoArtist"];
}
-(id)initWithCoder:(NSCoder *)aDecoder{
if (self=[superinit]) {
self.infoID=[aDecoderdecodeObjectForKey:@"infoID"];
self.infoName=[aDecoderdecodeObjectForKey:@"infoName"];
self.infoImage=[aDecoderdecodeObjectForKey:@"infoImage"];
self.infoArtist=[aDecoderdecodeObjectForKey:@"infoArtist"];
}
return self;
}
@end
NSMutableData *archiveData=[NSMutableDatadata];
NSKeyedArchiver *archiver=[[NSKeyedArchiveralloc]initForWritingWithMutableData:archiveData];
[archiverencodeObject:infoArrayforKey:@"pInfoArray"];
[archiverfinishEncoding];
NSString *document=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES)objectAtIndex:0];
NSString *filePath=[documentstringByAppendingPathComponent:@"storeFile"];
[archiveDatawriteToFile:filePath atomically:YES];
而在需要使用这些数据的时候就可以:NSString *document=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES)objectAtIndex:0];
NSString *storeFile=[document stringByAppendingPathComponent:@"storeFile"];
if ([[NSFileManagerdefaultManager] fileExistsAtPath:storeFile]) {
NSData *data=[NSDatadataWithContentsOfFile:storeFile];
if ([data length]>0) {
NSKeyedUnarchiver *Unarchiver=[[NSKeyedUnarchiveralloc] initForReadingWithData:data];
NSArray *array=[Unarchiver decodeObjectForKey:@"pInfoArray"];
[UnarchiverfinishDecoding];
[Unarchiverrelease];
for (int i=0;i<[arraycount]; i++) { Info *tempInfo=[array objectAtIndex:i];
...
}
}
}
- iOS开发之归档
- iOS开发之归档
- iOS开发之归档
- iOS开发之数据以及对象归档与解归档
- iOS开发之归档(NSKeyedArchiver)和反归档(NSKeyedUnarchiver)
- iOS开发之自定义对象归档
- iOS开发之 UIAlertView 沙盒 归档
- iOS开发-归档
- iOS开发归档存储
- iOS之对象归档
- IOS开发中的归档与反归档
- iOS开发之数据持久化 --NSKeydeArchiver归档
- iOS开发之数据持久化-归档
- iOS开发之APP USER对象存储归档
- IOS巅峰之归档与反归档
- iOS数据存储之---归档
- ios数据存储之归档
- iOS存储方式之归档
- 黑马程序员_集合框架 Collection
- Windows8 图库,图片展示软件
- 表单验证器
- 内核_.config 内核配置[ZT]--make menuconfig(very good)
- c# Convert.ToString()和 .ToString()的区别
- iOS开发之归档
- 题目67:More is better
- maven优化-repositories,dependencyManagement,pluginManagement
- Ext的Calender实例编辑
- C++如何获取文件属性
- Android 引导界面制作
- C#绘制条码CODE39和CODE39全码模式
- Window_Open详解
- RETURNING INTO的简单用法