首页 > 代码库 > Objective-C数据保存和读取
Objective-C数据保存和读取
一、NSCoding协议中的Archiving和Unarchiving
(1)Archiving一个object,会记录这个对象的所有的properties到filesystem;
(2)Unarchiving一个object,会从data中重新创建这个object。
类中的实力要Archiving和Unarchiving,需遵守NSCoding协议,并要实现以下两个方法:
@protocol NSCoding -(void)encodeWithCoder:(NSCoder*)aCoder; -(instancetype)initWithCoder:(NSCoder*)aCoder; @end
例:
//存 -(void)encodeWithCoder:(NSCoder*)aCoder{ [aCoder encodeObject:self.itemName forKey:@"itemName"]; [aCoder encodeInt:self.valueInDollars forKey:@"valueInDollars"]; } //取 -(instancetype)initWithCoder:(NSCoder*)aCoder{ self = [super init]; if(self){ _itemName = [aDecoder decodeObjectForKey:@"itemName"]; _valueInDollars = [aDecoder decodeIntForKey:@"valueInDollars"]; } return self; }
类似地,
XIB file被保存,即是把views archived into XIB file;
当应用程序启动时,从XIB file里unarchive the views。
二、使用NSCoder的子类在sandbox中存取
应用程序的sandbox是一个目录,包括:Documents、Library(不会在应用程序退出时删除)、tmp(会在应用程序退出时删除)。
NSCoder的子类,这里指:NSKeyedArchiver和NSKeyedUnArchiver这两个类。
例:
//生成file path -(NSString *)itemArchivePath { NSArray *documentDirectories = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES); NSString *documentDirectory = [documentDirectories firstObject]; return [ documentDirectory stringByAppendingPathComponent:@"items.archive"]; } //存 -(BOOL)saveChanges { NSString *path = [self itemArchivePath]; return [NSKeyedArchiver archiveRootObject:XXX toFile:path]; } //取 -(instancetype)initPrivate { self = [super init]; if(self){ NSString *path = [self itemArchivePath]; _privateItem = [NSKeyedUnarchiver unarchiveObjectWithFile:path]; } return self; }
NSKeyedArchiver存对象的过程分为两步:(1)先调用encodeWithCoder来encode变量到NSKeyedArchiver;(2)再存到path。
三、用NSData写入FileSystem
例:
-(NSString*)imagePathForKey:(NSString*)key{ NSArray *documentDirectories =....; NSString *documentDirectory = ...; return [ documentDirectory stringByAppendingPathComponent:key]; } //写入 NSString imagePath = [self imagePathForKey:key]; NSData *data = http://www.mamicode.com/UIImageJPEGRepresentation(image,0.5); [data writeToFile:imagePath atomically:YES]; //删除 [[NSFileManager defaultManager] removeItemAtPath:imagePath error:nil]; //读取 UIImage *image = [UIImage imageWithContentOfFile:imagePath];
其中NSFileManager可以获取、创建、拷贝以及移动文件和目录。
Objective-C数据保存和读取
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。