第10章 Archiving

第10章 Archiving

10.1 数据的archiving
当我们需要存储程序里的信息,使得我们下次打开程序时,可以从存储的信息里重新构造对象。这个时候就需要用到Archiving。
要实现Archiving需要两个步骤:一.告诉对象如何archive自己。二.启动archiving。

一.  实现第一个步骤需要用到两个函数。
1)编码   -(void)encodeWithCoder: (NSCoder *)coder;     变量 ---> coder
可以使用 encodeObject,encodeBool, encodeDouble, encodeFloat, encodeInt等函数。

2)解码   -(id)initWithCoder: (NSCoder *)coder                 coder--->变量
可以使用 decodeObjectForKey, decodeBoolForKey,等函数。

3)protocol的概念
protocol就是借口的意思,要实现一个接口,必须实现protocol里定义的所有函数。
NSCoding接口需要实现的接口函数就是上面提到的编码和解码函数。为了声明实现了protocol,需要在类声明里加上<>。例

如:@interface Person : NSObject<NSCoding>

二. 知道如何编解码之后,需要知道如何启动他们。

对于document类型的程序。在save和load时,我们可以启动这个过程。

1)saving时
需要实现函数 -(NSData *)dataOfType: (NSString *)aType error: (NSError **)outError
{return [NSKeyedArchiver archivedDataWithRootObject:employees]}
2)loading时
需要实现函数 -(BOOL)readFromData: (NSData *)data ofType: (NSString *)typeName error: (NSError **)outError
{
NSMutableArray *newArray = nil;
newArray = [NSKeyUnarchiver unarchiveObjectWithData:data];
[self setEmployees:newArray];
return YES;
}

10.2 额外知识

1.文档架构
Document 类型的程序相比于普通的程序,需要完成下面的这些功能。
1) 数据的储存和加载。2) 数据的显示。3) 视图变化后数据的更新。
所有的document都由一个NSdocumentController控制。

NSDocumentController--->NSMutableArray--->document 1
--->document 2
....
2.为程序设置图标和扩展名。

3.如何防止循环archiving。
因为我们在archiving一个对象时,会archiving这个对象引用到的其它对象。当出现循环引用的情况时,就会出现无限的archiving了。如何解决这个问题?
在archiving时,对于已经archived的对象,可以用一个特殊的符号代表它。

4.如何创建一个protocol。

5.在编辑,撤销编辑之后,知道不需要保存更改?
在内部对于变化会有一个计数。当change产生时,count++。当undo执行时,count--。如果count==0 就表示没有需要保存的数据了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值