iOS开发-归档与数据恢复
2015-08-31 16:31
411 查看
归档,是指将OC对象存储为一个文件和网络上的一个数据块。
数据恢复,是指将一个文件或网络上的一个归档数据恢复成OC对象。
主要用于自定义的对象进行存储。
在iOS中很多内置的类都是默认了实现归档功能,想NSString、NSNumber、NSArray、NSDictionary等;
定义NSArray或NSDicitionary类型,初始化数据后,调用NSKeyedArchiver 类的archiveRootObject 传入file路径,即可将当前NSArray对象完好的保存到文件系统中。
读取归档数据,使用NSKeydUnarchiver类unarchiveObjectWithFile方法可以直接从文件读回数据,并返回NSArray对象
NSKeyedArchiver和NSKeyedUnarchiver类都是将对象属性和值以key|value的方式顺序存储和读取的。
对于自定义的对象需要实现的方法
当多个对象在同一个文件时,可以用NSData归档数据
写的不好的地方请多多指教!
数据恢复,是指将一个文件或网络上的一个归档数据恢复成OC对象。
主要用于自定义的对象进行存储。
在iOS中很多内置的类都是默认了实现归档功能,想NSString、NSNumber、NSArray、NSDictionary等;
定义NSArray或NSDicitionary类型,初始化数据后,调用NSKeyedArchiver 类的archiveRootObject 传入file路径,即可将当前NSArray对象完好的保存到文件系统中。
读取归档数据,使用NSKeydUnarchiver类unarchiveObjectWithFile方法可以直接从文件读回数据,并返回NSArray对象
NSKeyedArchiver和NSKeyedUnarchiver类都是将对象属性和值以key|value的方式顺序存储和读取的。
对于自定义的对象需要实现的方法
- (void)encodeWithCoder:(NSCoder *)aCoder 与方法 - (id)initWithCoder:(NSCoder *)aDecoder 例如 .h文件 @interface Student : NSObject<NSCoding> @property(nonatomic, copy) NSString *name; @property(nonatomic, assign) int number; @property(nonatomic, assign) float score; @end .m文件 @implementation Student - (void)encodeWithCoder:(NSCoder *)aCoder { [aCoder encodeObject:self.name forKey:@"name"]; [aCoder encodeInt:self.number forKey:@"number"]; [aCoder encodeInt:self.score forKey:@"score"]; } - (id)initWithCoder:(NSCoder *)aDecoder { self.name = [aDecoder decodeObjectForKey:@"name"]; self.number = [aDecoder decodeIntForKey:@"number"]; self.score = [aDecoder decodeIntForKey:@"score"]; return self; } //如果父类也遵守协议,上述方法分别需要加 [super encodeWithCoder:aCoder]; self = [super initWithCoder:aDecoder]; @end 归档Student对象 Student *student = [Student new]; student.name = @"张三"; student.number = 10; student.score = 85; //filearray是文件沙盒路径 NSString *studentFile = [filearray stringByAppendingPathComponent:@"student.text"]; //归档 [NSKeyedArchiver archiveRootObject:student toFile:studentFile]; //恢复 Student *student2 = [NSKeyedUnarchiver unarchiveObjectWithFile:studentFile];
当多个对象在同一个文件时,可以用NSData归档数据
Student *student1 = [Student new]; student1.name = @"张三"; student1.number = 10; student1.score = 85; Student *student2 = [Student new]; student2.name = @"李四"; student2.number = 20; student2.score = 95; NSMutableData *data = [NSMutableData new]; NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc]initForWritingWithMutableData:data]; [archiver encodeObject:student1 forKey:@"student1"]; [archiver encodeObject:student2 forKey:@"student2"]; //归档完毕执行方法 [archiver finishEncoding]; //将数据归档 [data writeToFile:studentFile atomically:YES];
写的不好的地方请多多指教!
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- js判断客户端是iOS还是Android等移动终端的方法
- IOS开发环境windows化攻略
- .net平台推送ios消息的实现方法
- 探讨Android与iOS,我们将何去何从?
- Android、iOS和Windows Phone中的推送技术详解
- IOS 改变键盘颜色代码
- Android和IOS的浏览器中检测是否安装某个客户端的方法
- javascript实现阻止iOS APP中的链接打开Safari浏览器
- IOS开发第三方语音-微信语音
- iOS开发之路--微博OAuth授权_取得用户授权的accessToken
- ios通过按钮点击异步加载图片
- 加载带有手势识别器的XIB文件需注意哪些问题
- 仅需几行代码实现方便易用的状态栏指示器